Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master'
Browse files Browse the repository at this point in the history
# Conflicts:
#	repo/repo-api/src/main/java/com/evolveum/midpoint/repo/api/RepositoryService.java
  • Loading branch information
mederly committed Apr 15, 2021
2 parents 303168e + 40e014e commit 20c9580
Show file tree
Hide file tree
Showing 86 changed files with 2,288 additions and 556 deletions.
Expand Up @@ -355,14 +355,26 @@ public void shortDump(StringBuilder sb) {
}
}

/** Returns orig value or null for the nullable input polystring. */
public static String getOrig(PolyString s) {
return s != null ? s.getOrig() : null;
}

/** Returns orig value or null for the nullable input polystring. */
public static String getOrig(PolyStringType s) {
return s != null ? s.getOrig() : null;
}

/** Returns norm value or null for the nullable input polystring. */
public static String getNorm(PolyString s) {
return s != null ? s.getNorm() : null;
}

/** Returns norm value or null for the nullable input polystring. */
public static String getNorm(PolyStringType s) {
return s != null ? s.getNorm() : null;
}

@Override
public boolean match(PolyString other) {
if (this == other) return true;
Expand Down
Expand Up @@ -12,7 +12,6 @@
* Object with specified criteria (OID) has not been found in the repository.
*
* @author Radovan Semancik
*
*/
public class ObjectNotFoundException extends CommonException {
private static final long serialVersionUID = -9003686713018111855L;
Expand Down Expand Up @@ -44,6 +43,11 @@ public ObjectNotFoundException(LocalizableMessage userFriendlyMessage) {
super(userFriendlyMessage);
}

public ObjectNotFoundException(Class<?> type, String oid) {
this("Object of type '" + type.getSimpleName() + "' with OID '" + oid + "' was not found.",
oid);
}

public ObjectNotFoundException(String message, String oid) {
super(message);
this.oid = oid;
Expand Down
Expand Up @@ -110,26 +110,6 @@
public interface RepositoryService {

String CLASS_NAME_WITH_DOT = RepositoryService.class.getName() + ".";
String GET_OBJECT = CLASS_NAME_WITH_DOT + "getObject";
String ADD_OBJECT = CLASS_NAME_WITH_DOT + "addObject";
String DELETE_OBJECT = CLASS_NAME_WITH_DOT + "deleteObject";
String SEARCH_OBJECTS = CLASS_NAME_WITH_DOT + "searchObjects";
String SEARCH_CONTAINERS = CLASS_NAME_WITH_DOT + "searchContainers";
String COUNT_CONTAINERS = CLASS_NAME_WITH_DOT + "countContainers";
String MODIFY_OBJECT = CLASS_NAME_WITH_DOT + "modifyObject";
String MODIFY_OBJECT_DYNAMICALLY = CLASS_NAME_WITH_DOT + "modifyObjectDynamically";
String COUNT_OBJECTS = CLASS_NAME_WITH_DOT + "countObjects";
String GET_VERSION = CLASS_NAME_WITH_DOT + "getVersion";
String SEARCH_OBJECTS_ITERATIVE = CLASS_NAME_WITH_DOT + "searchObjectsIterative";
String SEARCH_SHADOW_OWNER = CLASS_NAME_WITH_DOT + "searchShadowOwner";
String ADVANCE_SEQUENCE = CLASS_NAME_WITH_DOT + "advanceSequence";
String RETURN_UNUSED_VALUES_TO_SEQUENCE = CLASS_NAME_WITH_DOT + "returnUnusedValuesToSequence";
String EXECUTE_QUERY_DIAGNOSTICS = CLASS_NAME_WITH_DOT + "executeQueryDiagnostics";
String ADD_DIAGNOSTIC_INFORMATION = CLASS_NAME_WITH_DOT + "addDiagnosticInformation";
String HAS_CONFLICT = CLASS_NAME_WITH_DOT + "hasConflict";

String KEY_DIAG_DATA = "repositoryDiagData"; // see GetOperationOptions.attachDiagData
String KEY_ORIGINAL_OBJECT = "repositoryOriginalObject";

String OP_ADD_OBJECT = "addObject";
String OP_DELETE_OBJECT = "deleteObject";
Expand All @@ -145,7 +125,32 @@ public interface RepositoryService {
String OP_SEARCH_SHADOW_OWNER = "searchShadowOwner";
String OP_SEARCH_OBJECTS = "searchObjects";
String OP_SEARCH_OBJECTS_ITERATIVE = "searchObjectsIterative";
String OP_SEARCH_CONTAINERS = "searchContainers";
String OP_COUNT_CONTAINERS = "countContainers";
String OP_FETCH_EXT_ITEMS = "fetchExtItems";
String OP_ADD_DIAGNOSTIC_INFORMATION = "addDiagnosticInformation";
String OP_HAS_CONFLICT = "hasConflict";

String GET_OBJECT = CLASS_NAME_WITH_DOT + OP_GET_OBJECT;
String ADD_OBJECT = CLASS_NAME_WITH_DOT + OP_ADD_OBJECT;
String DELETE_OBJECT = CLASS_NAME_WITH_DOT + OP_DELETE_OBJECT;
String SEARCH_OBJECTS = CLASS_NAME_WITH_DOT + OP_SEARCH_OBJECTS;
String SEARCH_CONTAINERS = CLASS_NAME_WITH_DOT + OP_SEARCH_CONTAINERS;
String COUNT_CONTAINERS = CLASS_NAME_WITH_DOT + OP_COUNT_CONTAINERS;
String MODIFY_OBJECT = CLASS_NAME_WITH_DOT + OP_MODIFY_OBJECT;
String COUNT_OBJECTS = CLASS_NAME_WITH_DOT + OP_COUNT_OBJECTS;
String MODIFY_OBJECT_DYNAMICALLY = CLASS_NAME_WITH_DOT + OP_MODIFY_OBJECT_DYNAMICALLY;
String GET_VERSION = CLASS_NAME_WITH_DOT + OP_GET_VERSION;
String SEARCH_OBJECTS_ITERATIVE = CLASS_NAME_WITH_DOT + OP_SEARCH_OBJECTS_ITERATIVE;
String SEARCH_SHADOW_OWNER = CLASS_NAME_WITH_DOT + OP_SEARCH_SHADOW_OWNER;
String ADVANCE_SEQUENCE = CLASS_NAME_WITH_DOT + OP_ADVANCE_SEQUENCE;
String RETURN_UNUSED_VALUES_TO_SEQUENCE = CLASS_NAME_WITH_DOT + OP_RETURN_UNUSED_VALUES_TO_SEQUENCE;
String EXECUTE_QUERY_DIAGNOSTICS = CLASS_NAME_WITH_DOT + OP_EXECUTE_QUERY_DIAGNOSTICS;
String ADD_DIAGNOSTIC_INFORMATION = CLASS_NAME_WITH_DOT + OP_ADD_DIAGNOSTIC_INFORMATION;
String HAS_CONFLICT = CLASS_NAME_WITH_DOT + OP_HAS_CONFLICT;

String KEY_DIAG_DATA = "repositoryDiagData"; // see GetOperationOptions.attachDiagData
String KEY_ORIGINAL_OBJECT = "repositoryOriginalObject";

/**
* Returns object for provided OID.
Expand Down
3 changes: 2 additions & 1 deletion repo/repo-sqale/sql/pgnew-experiments.sql
Expand Up @@ -334,7 +334,8 @@ select t.oid as table_oid,
tt.relname as toast_name,
pg_size_pretty(pg_relation_size(t.oid)) AS table_size,
pg_size_pretty(pg_relation_size(tt.oid)) AS toast_size,
pg_size_pretty(pg_relation_size(t.oid) + coalesce(pg_relation_size(tt.oid), 0)) AS total_size
pg_size_pretty(pg_relation_size(t.oid) + coalesce(pg_relation_size(tt.oid), 0)) AS total_size,
t.reltuples as rows -- non-precise count
from pg_class t
left join pg_class tt on t.reltoastrelid = tt.oid and tt.relkind = 't'
where t.relkind = 'r' and t.relnamespace = (select oid from pg_namespace where nspname = 'public')
Expand Down
18 changes: 11 additions & 7 deletions repo/repo-sqale/sql/pgnew-repo.sql
Expand Up @@ -28,6 +28,7 @@ CREATE TYPE ContainerType AS ENUM (
'ACCESS_CERTIFICATION_WORK_ITEM',
'ASSIGNMENT',
'INDUCEMENT',
'LOOKUP_TABLE_ROW',
'OPERATION_EXECUTION',
'TRIGGER');

Expand Down Expand Up @@ -189,7 +190,9 @@ CREATE TABLE m_uri (
uri TEXT/*VARCHAR(255)*/ NOT NULL UNIQUE
);

-- there can be more constants pre-filled, but that adds overhead, let the first-start do it
-- There can be more constants pre-filled, but that adds overhead, let the first-start do it.
-- Nothing in the application code should rely on anything inserted here, not even for 0=default.
-- Pinning 0 to default relation is merely for convenience when reading the DB tables.
INSERT INTO m_uri (id, uri)
VALUES (0, 'http://midpoint.evolveum.com/xml/ns/public/common/org-3#default');
-- endregion
Expand Down Expand Up @@ -959,18 +962,19 @@ ALTER TABLE m_lookup_table ADD CONSTRAINT m_lookup_table_name_norm_key UNIQUE (n
-- Represents LookupTableRowType, see also m_lookup_table above
CREATE TABLE m_lookup_table_row (
owner_oid UUID NOT NULL REFERENCES m_lookup_table(oid) ON DELETE CASCADE,
row_id INTEGER NOT NULL,
row_key TEXT/*VARCHAR(255)*/,
containerType ContainerType GENERATED ALWAYS AS ('LOOKUP_TABLE_ROW') STORED,
key TEXT/*VARCHAR(255)*/,
value TEXT/*VARCHAR(255)*/,
label_orig TEXT/*VARCHAR(255)*/,
label_norm TEXT/*VARCHAR(255)*/,
row_value TEXT/*VARCHAR(255)*/,
lastChangeTimestamp TIMESTAMPTZ,

PRIMARY KEY (owner_oid, row_id)
);
PRIMARY KEY (owner_oid, cid)
)
INHERITS(m_container);

ALTER TABLE m_lookup_table_row
ADD CONSTRAINT m_lookup_table_row_owner_oid_row_key_key UNIQUE (owner_oid, row_key);
ADD CONSTRAINT m_lookup_table_row_owner_oid_key_key UNIQUE (owner_oid, key);

-- Represents ConnectorType, see https://wiki.evolveum.com/display/midPoint/Identity+Connectors
CREATE TABLE m_connector (
Expand Down
Expand Up @@ -9,6 +9,7 @@
import com.querydsl.sql.SQLQuery;

import com.evolveum.midpoint.prism.query.InOidFilter;
import com.evolveum.midpoint.repo.sqale.filtering.InOidFilterProcessor;
import com.evolveum.midpoint.repo.sqale.qmodel.SqaleTableMapping;
import com.evolveum.midpoint.repo.sqlbase.SqlQueryContext;
import com.evolveum.midpoint.repo.sqlbase.SqlRepoContext;
Expand Down
Expand Up @@ -62,8 +62,9 @@ public SqaleRepoContext(
uriCache = new UriCache();
}

// This has nothing to do with "repo cache" which is higher than this.
@PostConstruct
public void init() {
public void clearCaches() {
try (JdbcSession jdbcSession = newJdbcSession().startReadOnlyTransaction()) {
uriCache.initialize(jdbcSession);
}
Expand Down Expand Up @@ -91,7 +92,7 @@ public Integer resolveUriToId(QName uri) {
}

/** Returns ID for URI creating new cache row in DB as needed. */
public Integer processCachedUri(String uri, JdbcSession jdbcSession) {
return uriCache.processCachedUri(uri, jdbcSession);
public Integer processCacheableUri(String uri, JdbcSession jdbcSession) {
return uriCache.processCacheableUri(uri, jdbcSession);
}
}
Expand Up @@ -242,7 +242,8 @@ public long getInitializationFailTimeout() {

@Override
public boolean isFatalException(Throwable ex) {
return false;
// by default, any exception is fatal, unless specified otherwise (not yet implemented)
return true;
}

@Override
Expand Down

0 comments on commit 20c9580

Please sign in to comment.