Search in sources :

Example 26 with ConfiguredObjectRecord

use of org.apache.qpid.server.store.ConfiguredObjectRecord in project qpid-broker-j by apache.

the class UpgradeFrom7To8 method performUpgrade.

@Override
public void performUpgrade(Environment environment, UpgradeInteractionHandler handler, ConfiguredObject<?> parent) {
    reportStarting(environment, 7);
    DatabaseConfig dbConfig = new DatabaseConfig();
    dbConfig.setTransactional(true);
    dbConfig.setAllowCreate(true);
    Database hierarchyDb = environment.openDatabase(null, "CONFIGURED_OBJECT_HIERARCHY", dbConfig);
    Database configuredObjectsDb = environment.openDatabase(null, "CONFIGURED_OBJECTS", dbConfig);
    Database configVersionDb = environment.openDatabase(null, "CONFIG_VERSION", dbConfig);
    Database messageMetadataDb = environment.openDatabase(null, "MESSAGE_METADATA", dbConfig);
    Database messageMetadataSeqDb = environment.openDatabase(null, "MESSAGE_METADATA.SEQ", dbConfig);
    long maxMessageId = getMaximumMessageId(messageMetadataDb);
    createMessageMetadataSequence(messageMetadataSeqDb, maxMessageId);
    Cursor objectsCursor = null;
    String stringifiedConfigVersion = BrokerModel.MODEL_VERSION;
    int configVersion = getConfigVersion(configVersionDb);
    if (configVersion > -1) {
        stringifiedConfigVersion = "0." + configVersion;
    }
    configVersionDb.close();
    String virtualHostName = parent.getName();
    Map<String, Object> virtualHostAttributes = new HashMap<String, Object>();
    virtualHostAttributes.put("modelVersion", stringifiedConfigVersion);
    virtualHostAttributes.put("name", virtualHostName);
    UUID virtualHostId = UUIDGenerator.generateVhostUUID(virtualHostName);
    ConfiguredObjectRecord virtualHostRecord = new org.apache.qpid.server.store.ConfiguredObjectRecordImpl(virtualHostId, "VirtualHost", virtualHostAttributes);
    Transaction txn = environment.beginTransaction(null, null);
    try {
        objectsCursor = configuredObjectsDb.openCursor(txn, null);
        DatabaseEntry key = new DatabaseEntry();
        DatabaseEntry value = new DatabaseEntry();
        ObjectMapper mapper = new ObjectMapper();
        while (objectsCursor.getNext(key, value, LockMode.RMW) == OperationStatus.SUCCESS) {
            UUID id = UUIDTupleBinding.getInstance().entryToObject(key);
            TupleInput input = TupleBinding.entryToInput(value);
            String type = input.readString();
            String json = input.readString();
            Map<String, Object> attributes = null;
            try {
                attributes = mapper.readValue(json, MAP_TYPE_REFERENCE);
            } catch (Exception e) {
                throw new StoreException(e);
            }
            String name = (String) attributes.get("name");
            if (type.equals("Exchange")) {
                _defaultExchanges.remove(name);
            }
            if (!type.endsWith("Binding")) {
                storeVirtualHostHierarchyRecord(hierarchyDb, txn, id, virtualHostId);
            } else {
                try {
                    DatabaseEntry hierarchyKey = new DatabaseEntry();
                    DatabaseEntry hierarchyValue = new DatabaseEntry();
                    Object queueIdString = attributes.remove("queue");
                    if (queueIdString instanceof String) {
                        UUID queueId = UUID.fromString(queueIdString.toString());
                        UUIDTupleBinding.getInstance().objectToEntry(queueId, hierarchyValue);
                        TupleOutput tupleOutput = new TupleOutput();
                        tupleOutput.writeLong(id.getMostSignificantBits());
                        tupleOutput.writeLong(id.getLeastSignificantBits());
                        tupleOutput.writeString("Queue");
                        TupleBinding.outputToEntry(tupleOutput, hierarchyKey);
                        hierarchyDb.put(txn, hierarchyKey, hierarchyValue);
                    }
                    Object exchangeIdString = attributes.remove("exchange");
                    if (exchangeIdString instanceof String) {
                        UUID exchangeId = UUID.fromString(exchangeIdString.toString());
                        UUIDTupleBinding.getInstance().objectToEntry(exchangeId, hierarchyValue);
                        TupleOutput tupleOutput = new TupleOutput();
                        tupleOutput.writeLong(id.getMostSignificantBits());
                        tupleOutput.writeLong(id.getLeastSignificantBits());
                        tupleOutput.writeString("Exchange");
                        TupleBinding.outputToEntry(tupleOutput, hierarchyKey);
                        hierarchyDb.put(txn, hierarchyKey, hierarchyValue);
                    }
                    TupleOutput tupleOutput = new TupleOutput();
                    tupleOutput.writeString(type);
                    StringWriter writer = new StringWriter();
                    mapper.writeValue(writer, attributes);
                    tupleOutput.writeString(writer.getBuffer().toString());
                    TupleBinding.outputToEntry(tupleOutput, value);
                    objectsCursor.putCurrent(value);
                } catch (IOException e) {
                    throw new StoreException(e);
                }
            }
        }
    } finally {
        if (objectsCursor != null) {
            objectsCursor.close();
        }
    }
    storeConfiguredObjectEntry(configuredObjectsDb, txn, virtualHostRecord);
    for (Map.Entry<String, String> defaultExchangeEntry : _defaultExchanges.entrySet()) {
        UUID id = UUIDGenerator.generateExchangeUUID(defaultExchangeEntry.getKey(), virtualHostName);
        Map<String, Object> exchangeAttributes = new HashMap<String, Object>();
        exchangeAttributes.put("name", defaultExchangeEntry.getKey());
        exchangeAttributes.put("type", defaultExchangeEntry.getValue());
        exchangeAttributes.put("lifetimePolicy", "PERMANENT");
        ConfiguredObjectRecord exchangeRecord = new org.apache.qpid.server.store.ConfiguredObjectRecordImpl(id, "Exchange", exchangeAttributes);
        storeConfiguredObjectEntry(configuredObjectsDb, txn, exchangeRecord);
        storeVirtualHostHierarchyRecord(hierarchyDb, txn, id, virtualHostId);
    }
    txn.commit();
    hierarchyDb.close();
    configuredObjectsDb.close();
    messageMetadataDb.close();
    messageMetadataSeqDb.close();
    reportFinished(environment, 8);
}
Also used : HashMap(java.util.HashMap) DatabaseEntry(com.sleepycat.je.DatabaseEntry) Cursor(com.sleepycat.je.Cursor) TupleInput(com.sleepycat.bind.tuple.TupleInput) StringWriter(java.io.StringWriter) Database(com.sleepycat.je.Database) UUID(java.util.UUID) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) DatabaseConfig(com.sleepycat.je.DatabaseConfig) TupleOutput(com.sleepycat.bind.tuple.TupleOutput) IOException(java.io.IOException) StoreException(org.apache.qpid.server.store.StoreException) IOException(java.io.IOException) StoreException(org.apache.qpid.server.store.StoreException) Transaction(com.sleepycat.je.Transaction) ConfiguredObject(org.apache.qpid.server.model.ConfiguredObject) ConfiguredObjectRecord(org.apache.qpid.server.store.ConfiguredObjectRecord) HashMap(java.util.HashMap) Map(java.util.Map)

Example 27 with ConfiguredObjectRecord

use of org.apache.qpid.server.store.ConfiguredObjectRecord in project qpid-broker-j by apache.

the class BDBHAVirtualHostNodeImpl method onMaster.

private void onMaster() {
    boolean success = false;
    try {
        boolean firstOpening = false;
        closeVirtualHostIfExist().get();
        getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.RECOVERY_START());
        VirtualHostStoreUpgraderAndRecoverer upgraderAndRecoverer = new VirtualHostStoreUpgraderAndRecoverer(this);
        if (getConfigurationStore().isOpen()) {
            upgraderAndRecoverer.reloadAndRecover(getConfigurationStore());
        } else {
            getConfigurationStore().upgradeStoreStructure();
            ConfiguredObjectRecord[] initialRecords = getInitialRecords();
            if (upgraderAndRecoverer.upgradeAndRecover(getConfigurationStore(), initialRecords)) {
                setAttributes(Collections.<String, Object>singletonMap(VIRTUALHOST_INITIAL_CONFIGURATION, "{}"));
                firstOpening = initialRecords.length == 0;
            }
        }
        getEventLogger().message(getConfigurationStoreLogSubject(), ConfigStoreMessages.RECOVERY_COMPLETE());
        VirtualHost<?> host = getVirtualHost();
        if (host == null) {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Creating new virtualhost with name : " + getGroupName());
            }
            Map<String, Object> hostAttributes = new HashMap<>();
            hostAttributes.put(VirtualHost.MODEL_VERSION, BrokerModel.MODEL_VERSION);
            hostAttributes.put(VirtualHost.NAME, getGroupName());
            hostAttributes.put(VirtualHost.TYPE, BDBHAVirtualHostImpl.VIRTUAL_HOST_TYPE);
            createChild(VirtualHost.class, hostAttributes);
        } else {
            if (LOGGER.isDebugEnabled()) {
                LOGGER.debug("Recovered virtualhost with name : " + getGroupName());
            }
            final VirtualHost<?> recoveredHost = host;
            // so the following test should always return true
            if (recoveredHost instanceof QueueManagingVirtualHost) {
                ((QueueManagingVirtualHost<?>) recoveredHost).setFirstOpening(firstOpening);
            }
            Subject.doAs(getSubjectWithAddedSystemRights(), new PrivilegedAction<Object>() {

                @Override
                public Object run() {
                    recoveredHost.open();
                    return null;
                }
            });
        }
        success = true;
    } catch (Exception e) {
        LOGGER.error("Failed to activate on hearing MASTER change event", e);
    } finally {
        setState(success ? State.ACTIVE : State.ERRORED);
    }
}
Also used : QueueManagingVirtualHost(org.apache.qpid.server.virtualhost.QueueManagingVirtualHost) HashMap(java.util.HashMap) LinkedHashMap(java.util.LinkedHashMap) URISyntaxException(java.net.URISyntaxException) TimeoutException(java.util.concurrent.TimeoutException) LogWriteException(com.sleepycat.je.LogWriteException) DatabaseException(com.sleepycat.je.DatabaseException) StoreException(org.apache.qpid.server.store.StoreException) ConnectionScopedRuntimeException(org.apache.qpid.server.util.ConnectionScopedRuntimeException) ServerScopedRuntimeException(org.apache.qpid.server.util.ServerScopedRuntimeException) IllegalConfigurationException(org.apache.qpid.server.configuration.IllegalConfigurationException) ExecutionException(java.util.concurrent.ExecutionException) VirtualHostStoreUpgraderAndRecoverer(org.apache.qpid.server.store.VirtualHostStoreUpgraderAndRecoverer) ManagedObject(org.apache.qpid.server.model.ManagedObject) ConfiguredObject(org.apache.qpid.server.model.ConfiguredObject) ConfiguredObjectRecord(org.apache.qpid.server.store.ConfiguredObjectRecord)

Example 28 with ConfiguredObjectRecord

use of org.apache.qpid.server.store.ConfiguredObjectRecord in project qpid-broker-j by apache.

the class TestBrokerConfiguration method removeObjectConfiguration.

public UUID[] removeObjectConfiguration(final Class<? extends ConfiguredObject> category, final String name) {
    final ConfiguredObjectRecord entry = findObject(category, name);
    if (entry != null) {
        if (category == VirtualHostNode.class) {
            final List<ConfiguredObjectRecord> aliasRecords = new ArrayList<>();
            for (ConfiguredObjectRecord record : getConfiguredObjectRecords()) {
                if (record.getType().equals(VirtualHostAlias.class.getSimpleName()) && name.equals(record.getAttributes().get(ConfiguredObject.NAME))) {
                    aliasRecords.add(record);
                }
            }
            _store.remove(aliasRecords.toArray(new ConfiguredObjectRecord[aliasRecords.size()]));
        }
        return _store.remove(entry);
    }
    return null;
}
Also used : ArrayList(java.util.ArrayList) ConfiguredObjectRecord(org.apache.qpid.server.store.ConfiguredObjectRecord)

Example 29 with ConfiguredObjectRecord

use of org.apache.qpid.server.store.ConfiguredObjectRecord in project qpid-broker-j by apache.

the class TestBrokerConfiguration method clearStore.

public void clearStore(final DurableConfigurationStore configurationStore) {
    final List<ConfiguredObjectRecord> recordsToDelete = new ArrayList<>();
    configurationStore.openConfigurationStore(new ConfiguredObjectRecordHandler() {

        @Override
        public void handle(final ConfiguredObjectRecord record) {
            recordsToDelete.add(record);
        }
    });
    if (!recordsToDelete.isEmpty()) {
        configurationStore.remove(recordsToDelete.toArray(new ConfiguredObjectRecord[recordsToDelete.size()]));
    }
}
Also used : ArrayList(java.util.ArrayList) ConfiguredObjectRecord(org.apache.qpid.server.store.ConfiguredObjectRecord) ConfiguredObjectRecordHandler(org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler)

Example 30 with ConfiguredObjectRecord

use of org.apache.qpid.server.store.ConfiguredObjectRecord in project qpid-broker-j by apache.

the class TestBrokerConfiguration method setObjectAttribute.

private boolean setObjectAttribute(ConfiguredObjectRecord entry, String attributeName, Object value) {
    Map<String, Object> attributes = new HashMap<String, Object>(entry.getAttributes());
    attributes.put(attributeName, value);
    ConfiguredObjectRecord newEntry = new ConfiguredObjectRecordImpl(entry.getId(), entry.getType(), attributes, entry.getParents());
    _store.update(false, newEntry);
    return true;
}
Also used : ConfiguredObjectRecordImpl(org.apache.qpid.server.store.ConfiguredObjectRecordImpl) HashMap(java.util.HashMap) ConfiguredObject(org.apache.qpid.server.model.ConfiguredObject) ConfiguredObjectRecord(org.apache.qpid.server.store.ConfiguredObjectRecord)

Aggregations

ConfiguredObjectRecord (org.apache.qpid.server.store.ConfiguredObjectRecord)58 HashMap (java.util.HashMap)27 ConfiguredObject (org.apache.qpid.server.model.ConfiguredObject)25 UUID (java.util.UUID)24 ConfiguredObjectRecordImpl (org.apache.qpid.server.store.ConfiguredObjectRecordImpl)14 IllegalConfigurationException (org.apache.qpid.server.configuration.IllegalConfigurationException)13 ArrayList (java.util.ArrayList)12 ConfiguredObjectRecordHandler (org.apache.qpid.server.store.handler.ConfiguredObjectRecordHandler)8 LinkedHashMap (java.util.LinkedHashMap)6 IOException (java.io.IOException)5 Transaction (com.sleepycat.je.Transaction)4 Map (java.util.Map)4 DurableConfigurationStore (org.apache.qpid.server.store.DurableConfigurationStore)4 StoreException (org.apache.qpid.server.store.StoreException)4 Mockito.doAnswer (org.mockito.Mockito.doAnswer)4 InvocationOnMock (org.mockito.invocation.InvocationOnMock)4 Answer (org.mockito.stubbing.Answer)4 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Connection (java.sql.Connection)3 SQLException (java.sql.SQLException)3