Search in sources :

Example 61 with DatabaseEntry

use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.

the class UpgradeFrom7To8 method storeConfiguredObjectEntry.

private void storeConfiguredObjectEntry(Database configuredObjectsDb, final Transaction txn, ConfiguredObjectRecord configuredObject) {
    DatabaseEntry key = new DatabaseEntry();
    UUIDTupleBinding uuidBinding = UUIDTupleBinding.getInstance();
    uuidBinding.objectToEntry(configuredObject.getId(), key);
    DatabaseEntry value = new DatabaseEntry();
    ConfiguredObjectBinding configuredObjectBinding = ConfiguredObjectBinding.getInstance();
    configuredObjectBinding.objectToEntry(configuredObject, value);
    OperationStatus status = configuredObjectsDb.put(txn, key, value);
    if (status != OperationStatus.SUCCESS) {
        throw new StoreException("Error writing configured object " + configuredObject + " to database: " + status);
    }
}
Also used : ConfiguredObjectBinding(org.apache.qpid.server.store.berkeleydb.tuple.ConfiguredObjectBinding) OperationStatus(com.sleepycat.je.OperationStatus) UUIDTupleBinding(org.apache.qpid.server.store.berkeleydb.tuple.UUIDTupleBinding) DatabaseEntry(com.sleepycat.je.DatabaseEntry) StoreException(org.apache.qpid.server.store.StoreException)

Example 62 with DatabaseEntry

use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.

the class UpgradeFrom7To8 method getConfigVersion.

private int getConfigVersion(Database configVersionDb) {
    Cursor cursor = null;
    try {
        cursor = configVersionDb.openCursor(null, null);
        DatabaseEntry key = new DatabaseEntry();
        DatabaseEntry value = new DatabaseEntry();
        while (cursor.getNext(key, value, LockMode.RMW) == OperationStatus.SUCCESS) {
            return IntegerBinding.entryToInt(value);
        }
        return -1;
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}
Also used : DatabaseEntry(com.sleepycat.je.DatabaseEntry) Cursor(com.sleepycat.je.Cursor)

Example 63 with DatabaseEntry

use of com.sleepycat.je.DatabaseEntry 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 64 with DatabaseEntry

use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.

the class Upgrader method performUpgradeFromVersion.

void performUpgradeFromVersion(int sourceVersion, Database versionDb) throws StoreException {
    while (sourceVersion != BDBConfigurationStore.VERSION) {
        upgrade(sourceVersion, ++sourceVersion);
        DatabaseEntry key = new DatabaseEntry();
        IntegerBinding.intToEntry(sourceVersion, key);
        DatabaseEntry value = new DatabaseEntry();
        LongBinding.longToEntry(System.currentTimeMillis(), value);
        versionDb.put(null, key, value);
    }
}
Also used : DatabaseEntry(com.sleepycat.je.DatabaseEntry)

Example 65 with DatabaseEntry

use of com.sleepycat.je.DatabaseEntry in project qpid-broker-j by apache.

the class UpgradeFrom5To6Test method populateOldXidEntries.

private void populateOldXidEntries(Environment environment) {
    final DatabaseEntry value = new DatabaseEntry();
    OldRecordImpl[] enqueues = { new OldRecordImpl("TEST1", 1) };
    OldRecordImpl[] dequeues = { new OldRecordImpl("TEST2", 2) };
    OldPreparedTransaction oldPreparedTransaction = new OldPreparedTransaction(enqueues, dequeues);
    OldPreparedTransactionBinding oldPreparedTransactionBinding = new OldPreparedTransactionBinding();
    oldPreparedTransactionBinding.objectToEntry(oldPreparedTransaction, value);
    final DatabaseEntry key = getXidKey();
    new DatabaseTemplate(environment, OLD_XID_DB_NAME, null).run(new DatabaseRunnable() {

        @Override
        public void run(Database xidDatabase, Database nullDatabase, Transaction transaction) {
            xidDatabase.put(null, key, value);
        }
    });
}
Also used : OldPreparedTransactionBinding(org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldPreparedTransactionBinding) NewPreparedTransaction(org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.NewPreparedTransaction) OldPreparedTransaction(org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldPreparedTransaction) Transaction(com.sleepycat.je.Transaction) Database(com.sleepycat.je.Database) OldRecordImpl(org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldRecordImpl) DatabaseEntry(com.sleepycat.je.DatabaseEntry) OldPreparedTransaction(org.apache.qpid.server.store.berkeleydb.upgrade.UpgradeFrom5To6.OldPreparedTransaction)

Aggregations

DatabaseEntry (com.sleepycat.je.DatabaseEntry)153 OperationStatus (com.sleepycat.je.OperationStatus)70 Transaction (com.sleepycat.je.Transaction)58 Database (com.sleepycat.je.Database)46 Cursor (com.sleepycat.je.Cursor)31 DatabaseException (com.sleepycat.je.DatabaseException)26 StoreException (org.apache.qpid.server.store.StoreException)20 UUID (java.util.UUID)17 ArrayList (java.util.ArrayList)13 AMQShortString (org.apache.qpid.server.protocol.v0_8.AMQShortString)12 DatabaseConfig (com.sleepycat.je.DatabaseConfig)11 ConnectionScopedRuntimeException (org.apache.qpid.server.util.ConnectionScopedRuntimeException)11 LockConflictException (com.sleepycat.je.LockConflictException)9 HashMap (java.util.HashMap)9 Versioned (voldemort.versioning.Versioned)9 HashSet (java.util.HashSet)8 UUIDTupleBinding (org.apache.qpid.server.store.berkeleydb.tuple.UUIDTupleBinding)8 TupleOutput (com.sleepycat.bind.tuple.TupleOutput)6 BimserverLockConflictException (org.bimserver.database.BimserverLockConflictException)6 SirixIOException (org.sirix.exception.SirixIOException)6