Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion examples/react-counter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@automerge/automerge-repo-demo-counter",
"repository": "https://github.com/automerge/automerge-repo/tree/master/examples/react-counter",
"private": true,
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"type": "module",
"scripts": {
"dev": "vite --open",
Expand Down
2 changes: 1 addition & 1 deletion examples/react-todo/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@automerge/automerge-repo-demo-todo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/examples/react-todo",
"private": true,
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"type": "module",
"scripts": {
"dev": "vite --open",
Expand Down
2 changes: 1 addition & 1 deletion examples/react-use-presence/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "automerge-use-awareness-example-project",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"private": true,
"repository": "https://github.com/automerge/automerge-repo/tree/master/examples/react-use-presence",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion examples/svelte-counter/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@automerge/automerge-repo-demo-counter-svelte",
"repository": "https://github.com/automerge/automerge-repo/tree/master/examples/svelte-counter",
"private": true,
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"type": "module",
"scripts": {
"dev": "vite",
Expand Down
2 changes: 1 addition & 1 deletion examples/sync-server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "@automerge/example-sync-server",
"repository": "https://github.com/automerge/automerge-repo/tree/master/examples/sync-server",
"private": true,
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"main": "index.js",
"license": "MIT",
"type": "module",
Expand Down
2 changes: 1 addition & 1 deletion lerna.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
"npmClient": "pnpm",
"version": "2.6.0-subduction.19"
"version": "2.6.0-subduction.20"
}
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-monorepo",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "Automerge Repo monorepo",
"main": "packages/automerge-repo/dist/index.js",
"repository": "https://github.com/automerge/automerge-repo",
Expand Down Expand Up @@ -39,7 +39,7 @@
"@eslint/eslintrc": "^3.3.0",
"@eslint/js": "^9.5.0",
"@automerge/automerge": "^3.2.6",
"@automerge/automerge-subduction": "0.12.0",
"@automerge/automerge-subduction": "0.12.1",
"@manypkg/cli": "^0.21.4",
"@playwright/test": "^1.57.0",
"@types/debug": "^4.1.12",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-react/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/react",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "A quick-import React package for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-react",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-network-broadcastchannel",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "BroadcastChannel network adapter for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-network-broadcastchannel",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-network-messagechannel",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "MessageChannel network adapter for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-network-messagechannel",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-network-websocket/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-network-websocket",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "isomorphic node/browser Websocket network adapter for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-network-websocket",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-react-hooks/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-react-hooks",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "Hooks to access an Automerge Repo from your react app.",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-react-hooks",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-solid-primitives/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-solid-primitives",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "Access Automerge Repo in your SolidJS application",
"type": "module",
"main": "dist/index.js",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-storage-indexeddb/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-storage-indexeddb",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "IndexedDB storage adapter for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-storage-indexeddb",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-storage-nodefs/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-storage-nodefs",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "Simple Node filesystem storage adapter for Automerge Repo",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-storage-nodefs",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand Down
2 changes: 1 addition & 1 deletion packages/automerge-repo-svelte-store/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo-svelte-store",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "A Svelte store containing your automerge documents",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo-svelte-store",
"license": "MIT",
Expand Down
4 changes: 2 additions & 2 deletions packages/automerge-repo/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@automerge/automerge-repo",
"version": "2.6.0-subduction.19",
"version": "2.6.0-subduction.20",
"description": "A repository object to manage a collection of automerge documents",
"repository": "https://github.com/automerge/automerge-repo/tree/master/packages/automerge-repo",
"author": "Peter van Hardenberg <pvh@pvh.ca>",
Expand All @@ -26,7 +26,7 @@
},
"dependencies": {
"@automerge/automerge": "^3.2.6",
"@automerge/automerge-subduction": "0.12.0",
"@automerge/automerge-subduction": "0.12.1",
"bs58check": "^3.0.1",
"cbor-x": "^1.3.0",
"debug": "^4.3.4",
Expand Down
13 changes: 7 additions & 6 deletions packages/automerge-repo/src/Repo.ts
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,7 @@ import {
SubductionSource,
type SubductionTimeouts,
} from "./subduction/source.js"
import type {
Policy as SubductionPolicy,
} from "@automerge/automerge-subduction/slim"
import type { Policy as SubductionPolicy } from "@automerge/automerge-subduction/slim"
import { DummyStorageAdapter } from "./helpers/DummyStorageAdapter.js"
import { encode, decode } from "cbor-x"
import type { EphemeralMessage } from "./network/messages.js"
Expand Down Expand Up @@ -102,6 +100,7 @@ export class Repo extends EventEmitter<RepoEvents> {
#remoteHeadsSubscriptions = new RemoteHeadsSubscriptions()
#remoteHeadsGossipingEnabled = false
#subductionSource: SubductionSource | null = null
#subductionEphemeralCount = 0
#idFactory: ((initialHeads: Heads) => Promise<Uint8Array>) | null
#peerId: PeerId

Expand Down Expand Up @@ -437,7 +436,7 @@ export class Repo extends EventEmitter<RepoEvents> {
targetId: this.#peerId, // not meaningful for pub/sub
documentId,
data,
count: 0,
count: this.#subductionEphemeralCount++,
sessionId: "subduction-bridge" as SessionId,
}
const payload = new Uint8Array(encode(fullMsg))
Expand Down Expand Up @@ -681,7 +680,10 @@ export class Repo extends EventEmitter<RepoEvents> {

if (this.storageSubsystem) {
this.storageSubsystem.removeDoc(documentId).catch(err => {
this.#log("error deleting document from storage", { documentId, err })
this.#log("error deleting document from storage", {
documentId,
err,
})
})
}

Expand Down Expand Up @@ -920,7 +922,6 @@ export interface RepoConfig {
* are optional; sensible defaults apply.
*/
subductionTimeouts?: SubductionTimeouts

}

/** A function that determines whether we should share a document with a peer
Expand Down
52 changes: 30 additions & 22 deletions packages/automerge-repo/test/_repo-perf.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ const idbHarness = (): StorageHarness => {
const measure = async (
harnessFactory: () => StorageHarness,
label: string,
mutationCount: number,
mutationCount: number
) => {
const harness = harnessFactory()

Expand Down Expand Up @@ -136,8 +136,7 @@ const measure = async (
await repo.shutdown()
const tShutdown = performance.now()

const fmt = (ms: number, width = 4) =>
ms.toFixed(0).padStart(width)
const fmt = (ms: number, width = 4) => ms.toFixed(0).padStart(width)

// eslint-disable-next-line no-console
console.log(
Expand All @@ -148,7 +147,7 @@ const measure = async (
`mutate=${fmt(tMutated - tDocReady)}ms ` +
`flush=${fmt(tFlushed - tMutated, 5)}ms ` +
`shutdown=${fmt(tShutdown - tFlushed, 5)}ms ` +
`TOTAL=${fmt(tShutdown - tCreate0, 5)}ms`,
`TOTAL=${fmt(tShutdown - tCreate0, 5)}ms`
)
} finally {
await harness.teardown()
Expand Down Expand Up @@ -183,25 +182,33 @@ const SCALE = process.env.PERF_SCALE
const PERF_TIMEOUT = 30 * 60 * 1000

maybeDescribe("automerge-repo perf (no networks, just storage)", () => {
test("memory: mutation count scaling", { timeout: PERF_TIMEOUT }, async () => {
// Warm up (Wasm init, JIT, allocator).
await measure(memoryHarness, "warmup", 10)
// eslint-disable-next-line no-console
console.log("---")
for (const n of SCALE) {
await measure(memoryHarness, "bench", n)
test(
"memory: mutation count scaling",
{ timeout: PERF_TIMEOUT },
async () => {
// Warm up (Wasm init, JIT, allocator).
await measure(memoryHarness, "warmup", 10)
// eslint-disable-next-line no-console
console.log("---")
for (const n of SCALE) {
await measure(memoryHarness, "bench", n)
}
}
})
)

test("nodefs: mutation count scaling", { timeout: PERF_TIMEOUT }, async () => {
// Warm up (Wasm init, JIT, fs cache).
await measure(nodefsHarness, "warmup", 10)
// eslint-disable-next-line no-console
console.log("---")
for (const n of SCALE) {
await measure(nodefsHarness, "bench", n)
test(
"nodefs: mutation count scaling",
{ timeout: PERF_TIMEOUT },
async () => {
// Warm up (Wasm init, JIT, fs cache).
await measure(nodefsHarness, "warmup", 10)
// eslint-disable-next-line no-console
console.log("---")
for (const n of SCALE) {
await measure(nodefsHarness, "bench", n)
}
}
})
)

test("idb: mutation count scaling", { timeout: PERF_TIMEOUT }, async () => {
// Warm up (Wasm init, JIT, fake-indexeddb shim).
Expand Down Expand Up @@ -241,8 +248,9 @@ maybeDescribe("automerge-repo perf (no networks, just storage)", () => {
const t1 = performance.now()
// eslint-disable-next-line no-console
console.log(
`[${harness.label.padEnd(6)}] mutations=${String(n).padStart(5)} ` +
`shutdown=${(t1 - t0).toFixed(1).padStart(7)}ms`,
`[${harness.label.padEnd(6)}] mutations=${String(n).padStart(
5
)} ` + `shutdown=${(t1 - t0).toFixed(1).padStart(7)}ms`
)
} finally {
await harness.teardown()
Expand Down
Loading