use of me.retrodaredevil.couchdbjava.response.DocumentResponse in project solarthing by wildmountainfarms.
the class CouchDbPacketSaver method handle.
@Override
public void handle(PacketCollection packetCollection) throws PacketHandleException {
// Normally we would try and create the database, but that doesn't work with non-admin cookie authenticated users
String id = packetCollection.getDbId();
String revision = idMap == null ? null : idMap.get(id);
final JsonData jsonData;
try {
jsonData = new StringJsonData(MAPPER.writeValueAsString(packetCollection));
} catch (JsonProcessingException e) {
throw new RuntimeException("Cannot serialize packet collection! This is bad!", e);
}
try {
final DocumentResponse response;
if (revision == null) {
response = database.putDocument(id, jsonData);
} else {
response = database.updateDocument(id, revision, jsonData);
}
LOGGER.debug("Now revision is: " + response.getRev() + ". It was: " + revision);
if (idMap != null) {
// Currently, if we have a new document ID, we never, ever, need to worry about using an older document ID, so we can clear the map to avoid keeping unnecessary memory
idMap.clear();
idMap.put(id, response.getRev());
}
} catch (CouchDbNotFoundException ex) {
throw new PacketHandleException("Got 'not found'. Does the database exist? Make sure to run the couchdb-setup!", ex);
} catch (CouchDbUpdateConflictException ex) {
if (idMap == null) {
// we are ignoring conflicts
LOGGER.debug("Got update conflict exception. Ignoring...");
return;
}
try {
String actualRev = database.getCurrentRevision(id);
idMap.put(id, actualRev);
LOGGER.debug("We were able to get the actual Revision ID for id=" + id + " actual rev=" + actualRev);
} catch (CouchDbException revEx) {
LOGGER.debug("Unable to get the actual Revision ID for id=" + id, revEx);
}
throw new PacketHandleException("Conflict while saving something to couchdb. id=" + id + " rev=" + revision + ". This usually means we put a packet in the database, but we weren't able to cache its rev id.", ex);
} catch (CouchDbException ex) {
if (ex.getCause() instanceof IOException) {
throw new PacketHandleException("We got a DbAccessException probably meaning we couldn't reach the database.", ex);
} else {
throw new PacketHandleException("Got a DbAccessException without IOException as a cause. Something must be wrong.", ex);
}
}
}
use of me.retrodaredevil.couchdbjava.response.DocumentResponse in project solarthing by wildmountainfarms.
the class CouchDbMillisDatabase method uploadPacketCollection.
@Override
public UpdateToken uploadPacketCollection(PacketCollection packetCollection, UpdateToken updateToken) throws SolarThingDatabaseException {
final JsonData jsonData;
try {
jsonData = new StringJsonData(mapper.writeValueAsString(packetCollection));
} catch (JsonProcessingException e) {
throw new RuntimeException("Couldn't serialize the packet collection", e);
}
try {
final DocumentResponse response;
if (updateToken == null) {
response = database.putDocument(packetCollection.getDbId(), jsonData);
} else {
RevisionUpdateToken revisionUpdateToken = CouchDbSolarThingDatabase.checkUpdateToken(updateToken);
response = database.updateDocument(packetCollection.getDbId(), revisionUpdateToken.getRevision(), jsonData);
}
return new RevisionUpdateToken(response.getRev());
} catch (CouchDbException e) {
throw ExceptionUtil.createFromCouchDbException(e);
}
}
Aggregations