Skip to content

Commit a78921d

Browse files
nanovadrai
authored andcommitted
upsert bulkCommit for elasticsearch6 ( handle create -> update -> update ) (#61)
* upser bulk commit * add upsert case to happyPath test
1 parent 35530c8 commit a78921d

File tree

2 files changed

+14
-18
lines changed

2 files changed

+14
-18
lines changed

lib/databases/elasticsearch6.js

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -215,23 +215,13 @@ _.extend(Elasticsearch.prototype, {
215215
bulkOperation.push({ delete: { _index: self.indexAndTypeName, _type: self.indexAndTypeName, _id: vm.id, version: vm.version } });
216216
deletedCount++;
217217
break;
218+
// upsert
218219
case 'create':
219-
obj = vm.attributes;
220-
bulkOperation.push(
221-
{ index: { _index: self.indexAndTypeName, _type: self.indexAndTypeName, _id: vm.id, op_type: 'create' } },
222-
obj);
223-
vm.version = 1;
224-
vm.actionOnCommit = 'update';
225-
indexCount++;
226-
break;
227220
case 'update':
228-
obj = vm.attributes;
229-
bulkOperation.push(
230-
{ update: { _index: self.indexAndTypeName, _type: self.indexAndTypeName, _id: vm.id, version: vm.version } },
231-
{ doc: obj });
232-
233-
vm.version = vm.version + 1;
234-
vm.actionOnCommit = 'update';
221+
obj = vm.attributes;
222+
bulkOperation.push(
223+
{ index: { _index: self.indexAndTypeName, _type: self.indexAndTypeName, _id: vm.id, opType: (vm.version) ? 'index' : 'create', version: vm.version || null } },
224+
obj);
235225
indexCount++;
236226
break;
237227
default:

test/repositoryWriteTest.js

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -824,13 +824,19 @@ describe.only('Repository write', function() {
824824
vm3.set('tags', ['a', 'b', 'c']);
825825
vm3.set('name', 'opqrstuvwxyz');
826826
vm3.set('bulk', true);
827+
828+
// upsert
829+
var vm4 = new ViewModel({id: '941931_upsert_bulk', bulk: true }, dummyRepo);
830+
vm4.actionOnCommit = 'update'; // simulate create -> update -> update replay scenario
831+
827832

828-
dummyRepo.bulkCommit([vm1, vm2, vm3], function(err, vms) {
833+
dummyRepo.bulkCommit([vm1, vm2, vm3, vm4], function(err, vms) {
829834
expect(err).not.to.be.ok();
830835
expect(vms[0].actionOnCommit).to.eql('update');
831836
expect(vms[1].actionOnCommit).to.eql('update');
832837
expect(vms[2].actionOnCommit).to.eql('update');
833-
expect(vms).to.have.length(3);
838+
expect(vms[3].actionOnCommit).to.eql('update');
839+
expect(vms).to.have.length(4);
834840

835841
var query = { bulk: true };
836842
if (type === 'elasticsearch6')
@@ -844,7 +850,7 @@ describe.only('Repository write', function() {
844850

845851
dummyRepo.find(query, function (err, vms) {
846852
expect(err).not.to.be.ok();
847-
expect(vms).to.have.length(3);
853+
expect(vms).to.have.length(4);
848854

849855
done();
850856
});

0 commit comments

Comments
 (0)