Skip to content

Instantly share code, notes, and snippets.

@eiri
Created November 22, 2019 06:27
Show Gist options
  • Save eiri/1e5ba550f5dbd271b0b7d03d65e66414 to your computer and use it in GitHub Desktop.
Save eiri/1e5ba550f5dbd271b0b7d03d65e66414 to your computer and use it in GitHub Desktop.
Testing facilities for removing of view_changes from CouchDB
{"docs":[{"word":"trashy","_id":"0001","bool":true,"number":358},{"word":"Teleostei","_id":"0002","bool":true,"number":368},{"word":"threadflower","_id":"0003","bool":true,"number":683},{"word":"passir","_id":"0004","bool":true,"number":875},{"word":"carotid","_id":"0005","bool":true,"number":762},{"word":"cogracious","_id":"0006","bool":false,"number":321},{"word":"feru","_id":"0007","bool":false,"number":588},{"word":"dumbbeller","_id":"0008","bool":false,"number":33},{"word":"foxberry","_id":"0009","bool":false,"number":321},{"word":"dishelm","_id":"0010","bool":false,"number":8},{"word":"Ancylocladus","_id":"0011","bool":true,"number":580},{"word":"surpliced","_id":"0012","bool":true,"number":887},{"word":"inky","_id":"0013","bool":true,"number":838},{"word":"utopographer","_id":"0014","bool":true,"number":887},{"word":"Almain","_id":"0015","bool":false,"number":562},{"word":"discretely","_id":"0016","bool":true,"number":586},{"word":"archdivine","_id":"0017","bool":false,"number":43},{"word":"anarthropodous","_id":"0018","bool":true,"number":705},{"word":"heller","_id":"0019","bool":true,"number":672},{"word":"blackstick","_id":"0020","bool":false,"number":148},{"word":"protoscientific","_id":"0021","bool":false,"number":619},{"word":"iatrotechnics","_id":"0022","bool":true,"number":95},{"word":"organum","_id":"0023","bool":false,"number":85},{"word":"underdrainer","_id":"0024","bool":false,"number":745},{"word":"Pachystima","_id":"0025","bool":true,"number":420},{"word":"holoparasitic","_id":"0026","bool":true,"number":543},{"word":"deceiver","_id":"0027","bool":true,"number":977},{"word":"fibroin","_id":"0028","bool":false,"number":51},{"word":"hydrocoralline","_id":"0029","bool":true,"number":345},{"word":"glaciology","_id":"0030","bool":true,"number":256},{"word":"teems","_id":"0031","bool":false,"number":863},{"word":"rethrow","_id":"0032","bool":false,"number":737},{"word":"paigle","_id":"0033","bool":false,"number":758},{"word":"frenzelite","_id":"0034","bool":false,"number":957},{"word":"amoebae","_id":"0035","bool":false,"number":621},{"word":"circumscription","_id":"0036","bool":false,"number":671},{"word":"multidenticulate","_id":"0037","bool":true,"number":926},{"word":"digammated","_id":"0038","bool":true,"number":310},{"word":"adlumidine","_id":"0039","bool":true,"number":823},{"word":"lachsa","_id":"0040","bool":false,"number":832},{"word":"fecundation","_id":"0041","bool":true,"number":907},{"word":"woodenware","_id":"0042","bool":false,"number":960},{"word":"oleosity","_id":"0043","bool":true,"number":820},{"word":"nitroprussic","_id":"0044","bool":true,"number":850},{"word":"styan","_id":"0045","bool":true,"number":501},{"word":"covenanting","_id":"0046","bool":true,"number":776},{"word":"exscriptural","_id":"0047","bool":false,"number":636},{"word":"Stuartia","_id":"0048","bool":true,"number":952},{"word":"bomb","_id":"0049","bool":true,"number":114},{"word":"convincibility","_id":"0050","bool":false,"number":32}]}
{"docs":[{"word":"plethysmographically","_id":"0051","bool":false,"number":248},{"word":"downtroddenness","_id":"0052","bool":false,"number":178},{"word":"nondeportation","_id":"0053","bool":false,"number":691},{"word":"shelving","_id":"0054","bool":true,"number":222},{"word":"coinmaker","_id":"0055","bool":false,"number":616},{"word":"concile","_id":"0056","bool":true,"number":581},{"word":"Froebelism","_id":"0057","bool":true,"number":324},{"word":"mentocondylial","_id":"0058","bool":false,"number":261},{"word":"penannular","_id":"0059","bool":true,"number":306},{"word":"aftercooler","_id":"0060","bool":false,"number":536},{"word":"Sienese","_id":"0061","bool":true,"number":881},{"word":"Schizotrypanum","_id":"0062","bool":true,"number":722},{"word":"Buddhistic","_id":"0063","bool":true,"number":347},{"word":"lapidescent","_id":"0064","bool":false,"number":138},{"word":"farweltered","_id":"0065","bool":false,"number":63},{"word":"denitrificator","_id":"0066","bool":false,"number":81},{"word":"mousetail","_id":"0067","bool":true,"number":767},{"word":"insee","_id":"0068","bool":true,"number":106},{"word":"copetitioner","_id":"0069","bool":false,"number":358},{"word":"nitrophyte","_id":"0070","bool":false,"number":477},{"word":"endosporous","_id":"0071","bool":false,"number":312},{"word":"atomician","_id":"0072","bool":true,"number":752},{"word":"axospermous","_id":"0073","bool":true,"number":873},{"word":"Cornelius","_id":"0074","bool":false,"number":402},{"word":"teretipronator","_id":"0075","bool":true,"number":497},{"word":"etherin","_id":"0076","bool":true,"number":989},{"word":"prostemmatic","_id":"0077","bool":false,"number":841},{"word":"kenspeckle","_id":"0078","bool":false,"number":878},{"word":"coinclude","_id":"0079","bool":false,"number":981},{"word":"Sigurd","_id":"0080","bool":true,"number":492},{"word":"reafflict","_id":"0081","bool":true,"number":155},{"word":"pneumonolysis","_id":"0082","bool":true,"number":117},{"word":"ornateness","_id":"0083","bool":true,"number":930},{"word":"dotage","_id":"0084","bool":true,"number":659},{"word":"mailbox","_id":"0085","bool":true,"number":479},{"word":"bagging","_id":"0086","bool":true,"number":846},{"word":"estipulate","_id":"0087","bool":false,"number":917},{"word":"Pycnodonti","_id":"0088","bool":false,"number":418},{"word":"Zygomycetes","_id":"0089","bool":true,"number":477},{"word":"marrowish","_id":"0090","bool":false,"number":869},{"word":"dynamoelectric","_id":"0091","bool":true,"number":19},{"word":"idioretinal","_id":"0092","bool":false,"number":523},{"word":"Ustilago","_id":"0093","bool":true,"number":651},{"word":"potestal","_id":"0094","bool":false,"number":156},{"word":"dynamiter","_id":"0095","bool":true,"number":198},{"word":"urushinic","_id":"0096","bool":true,"number":689},{"word":"preconcept","_id":"0097","bool":false,"number":390},{"word":"exonerative","_id":"0098","bool":false,"number":39},{"word":"swallowtail","_id":"0099","bool":true,"number":94},{"word":"virosis","_id":"0100","bool":false,"number":788}]}
{
"options": {
"seq_indexed": true,
"keyseq_indexed": true
},
"filters": {
"skip": "function(doc) { return doc.bool }"
},
"views": {
"full": {
"map": "function(doc) { emit(doc.word, doc); }"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
},
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"total": {
"map": "function(doc) { emit(doc.word, doc.number); }",
"reduce": "function(keys, vals) { return sum(vals); }"
}
}
}
{"docs":[{
"_id": "_design/ddocN",
"views": {
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
}
}
}, {
"_id": "_design/ddoc00",
"options": {
"seq_indexed": false,
"keyseq_indexed": false
},
"views": {
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
}
}
}, {
"_id": "_design/ddoc10",
"options": {
"seq_indexed": true,
"keyseq_indexed": false
},
"views": {
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
}
}
}, {
"_id": "_design/ddoc01",
"options": {
"seq_indexed": false,
"keyseq_indexed": true
},
"views": {
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
}
}
}, {
"_id": "_design/ddoc11",
"options": {
"seq_indexed": true,
"keyseq_indexed": true
},
"views": {
"count": {
"map": "function(doc) { emit(doc.word, 1); }",
"reduce": "_count"
},
"skip": {
"map": "function(doc) { if(doc.bool) { emit(doc.word, doc.number); }}"
}
}
}]}
sub.DEFAULT_GOAL := check
.EXPORT_ALL_VARIABLES:
CURL_HOME = $(CURDIR)
JAR = $(CURDIR)/jar
DB = http://localhost:15984
ADM_CRD = '{"username":"admin", "password": "admin"}'
USR_CRD = '{"name":"eiri", "password": "eiri"}'
.PHONY: check
check:
curl $(DB)
.PHONY: setup
setup:
curl $(DB)/_session -X POST -d $(ADM_CRD) -c $(JAR)
curl $(DB)/_users/org.couchdb.user:eiri -X PUT -d '{"name": "eiri", "password": "eiri", "roles": [], "type": "user"}' -b $(JAR) | jq .
bulk.json:
@$(CURDIR)/rand_json 50 | jo -a | jq -c '{docs: .}' > bulk.json
bulk2.json:
@$(CURDIR)/rand_json 50 | jo -a | jq -c '{docs: .}' > bulk2.json
.PHONY: create
create: bulk.json
curl $(DB)/_session -X POST -d $(ADM_CRD) -c $(JAR)
curl $(DB)/koi -X DELETE -b $(JAR)
curl $(DB)/koi -X PUT -b $(JAR)
curl $(DB)/koi/_security -X PUT -d '{"admins":{"names":["eiri"],"roles":["_admin"]}, "members":{"names":["eiri"],"roles":["_admin"]}}' -b $(JAR) | jq .
rm -f $(JAR)
curl $(DB)/_session -X POST -d $(USR_CRD) -c $(JAR)
curl $(DB)/koi/_bulk_docs -X POST -d @bulk.json -b $(JAR)
curl $(DB)/koi/_design/ddoc -X PUT -d @ddoc.json -b $(JAR)
.PHONY: $(JAR)
$(JAR):
rm -f $(JAR)
curl $(DB)/_session -X POST -d $(USR_CRD) -c $(JAR)
.PHONY: all_docs
all_docs: $(JAR)
curl $(DB)/koi/_all_docs -G -b $(JAR) | jq .
curl $(DB)/koi/_all_docs -G -d include_docs=true -d key='"_design/ddoc"' -b $(JAR) | jq .
.PHONY: read
read: $(JAR)
curl $(DB)/koi/_design/ddoc/_view/full -G -d limit=1 -d skip=3 -b $(JAR) | jq .
curl $(DB)/koi/_design/ddoc/_view/skip -G -d limit=1 -d skip=3 -b $(JAR) | jq .
curl $(DB)/koi/_design/ddoc/_view/count -G -d reduce=true -b $(JAR) | jq .
curl $(DB)/koi/_design/ddoc/_view/total -G -d group=true -d group_level=0 -b $(JAR) | jq .
.PHONY: changes
changes: $(JAR)
curl $(DB)/koi/_changes -G -b $(JAR)
curl $(DB)/koi/_changes -G -d filter="_view" -d view="ddoc/skip" -b $(JAR)
curl $(DB)/koi/_changes -G -d filter="ddoc/skip" -b $(JAR)
curl $(DB)/koi/_changes?filter="_selector" -X POST -b $(JAR) -d '{"selector": {"_id": {"$$regex": "^002\\d+"}}}'
.PHONY: update
update: bulk2.json $(JAR)
curl $(DB)/koi/0012?rev=1-a3c5b63b1504f6d0cdf96c81a99fb563 -X DELETE -b $(JAR)
curl $(DB)/koi/0023?rev=1-d94129555f75205b363db4ef47ef2aa6 -X DELETE -b $(JAR)
curl $(DB)/koi/0041?rev=1-eceb37685151446cb11b771413337449 -X DELETE -b $(JAR)
curl $(DB)/koi/_bulk_docs -X POST -d @bulk2.json -b $(JAR)
.PHONY: compact
compact: $(JAR)
curl $(DB)/koi/_compact/ddoc -X POST -b $(JAR) | jq .
.PHONY: purge
purge:
curl $(DB)/_session -X POST -d $(ADM_CRD) -c $(JAR)
curl $(DB)/koi/_purge -X POST -d '{"0012": ["1-a3c5b63b1504f6d0cdf96c81a99fb563", "2-1b3049944c1bd5023f4c025ebfc189c5"], "0023": ["1-d94129555f75205b363db4ef47ef2aa6", "2-545d4f2065f34d77285196b3d38e801c"]}' -b $(JAR) | jq .
.PHONY: info
info: $(JAR)
curl $(DB)/koi/_design/ddoc/_info -G -b $(JAR) | jq .
.PHONY: delete
delete:
curl $(DB)/_session -X POST -d $(ADM_CRD) -c $(JAR)
curl $(DB)/koi -X DELETE -b $(JAR) | jq .
.PHONY: run-all
run-all:
make delete
make create
make read
make info
make changes
make update
make read
make info
make changes
make compact
make read
make info
make changes
make purge
make read
make info
make changes
# migration test
.PHONY: before
before: bulk.json
curl $(DB)/_session -X POST -d $(ADM_CRD) -c $(JAR)
curl $(DB)/koi -X DELETE -b $(JAR)
curl "$(DB)/koi" -X PUT -b $(JAR)
curl $(DB)/koi/_security -X PUT -d '{"admins":{"names":["eiri"],"roles":["_admin"]}, "members":{"names":["eiri"],"roles":["_admin"]}}' -b $(JAR) | jq .
rm -f $(JAR)
curl $(DB)/_session -X POST -d $(USR_CRD) -c $(JAR)
curl $(DB)/koi/_bulk_docs -X POST -d @bulk.json -b $(JAR)
curl $(DB)/koi/_bulk_docs -X POST -d @ddocs.json -b $(JAR)
# read/info
make after
.PHONY: after
after: $(JAR)
for d in "ddocN" "ddoc00" "ddoc10" "ddoc01" "ddoc11" ; do \
curl -G -b $(JAR) $(DB)/koi/_design/$$d/_view/count -d reduce=true ; \
curl -G -b $(JAR) $(DB)/koi/_design/$$d/_info ; \
curl -G -b $(JAR) $(DB)/koi/_changes -d filter="_view" -d view="$$d/skip" ; \
done
#!/bin/bash
# prereq `brew intall coreutils jo`
defcount=1
display_usage() {
echo -e "Generate NUMBER of random json objects."
printf " Usage: %s [NUMBER] (DEFAULT: %s)\n\n" $(basename "$0") $defcount
}
random_number() {
gshuf -i 1-$1 -n 1
}
random_boolean() {
gshuf -i 0-1 -n 1
}
random_word() {
gshuf -n 1 /usr/share/dict/words | tr -d '\n'
}
if [[ ( $@ == "--help") || $@ == "-h" ]]
then
display_usage
exit 0
fi
# for i in $(seq 51 100)
for i in $(seq ${1:-$defcount})
do
jo \
word=$(random_word) \
-s _id=$(printf "%04d" $i) \
bool@$(random_boolean) \
number=$(random_number 1000)
done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment