diff --git a/mini-lsm-book/src/07-bloom-filter.md b/mini-lsm-book/src/07-bloom-filter.md
index fe07df9..2dfe948 100644
--- a/mini-lsm-book/src/07-bloom-filter.md
+++ b/mini-lsm-book/src/07-bloom-filter.md
@@ -1,3 +1,7 @@
+
+
# Bloom Filters
diff --git a/mini-lsm-book/src/08-key-compression.md b/mini-lsm-book/src/08-key-compression.md
index 840b5d9..d473071 100644
--- a/mini-lsm-book/src/08-key-compression.md
+++ b/mini-lsm-book/src/08-key-compression.md
@@ -1,3 +1,7 @@
+
+
# Key Compression
diff --git a/mini-lsm-book/src/09-whats-next.md b/mini-lsm-book/src/09-whats-next.md
index 64424de..49526d8 100644
--- a/mini-lsm-book/src/09-whats-next.md
+++ b/mini-lsm-book/src/09-whats-next.md
@@ -1,3 +1,7 @@
+
+
# What's Next
We did not finish this chapter as part of Mini-LSM v1.
diff --git a/mini-lsm-book/src/SUMMARY.md b/mini-lsm-book/src/SUMMARY.md
index ed66d7d..3bdf12d 100644
--- a/mini-lsm-book/src/SUMMARY.md
+++ b/mini-lsm-book/src/SUMMARY.md
@@ -1,3 +1,7 @@
+
+
# LSM in a Week
[Preface](./00-preface.md)
diff --git a/mini-lsm-book/src/copyright.md b/mini-lsm-book/src/copyright.md
index c57b9b1..380e6bc 100644
--- a/mini-lsm-book/src/copyright.md
+++ b/mini-lsm-book/src/copyright.md
@@ -1 +1,5 @@
-
Your feedback is greatly appreciated. Welcome to join our Discord Community.
Found an issue? Create an issue / pull request on github.com/skyzh/mini-lsm.
Copyright © 2022 - 2024 Alex Chi Z. All Rights Reserved.
+
+
+
Your feedback is greatly appreciated. Welcome to join our Discord Community.
Found an issue? Create an issue / pull request on github.com/skyzh/mini-lsm.
mini-lsm-book © 2022-2025 by Alex Chi Z is licensed under CC BY-NC-SA 4.0.
diff --git a/mini-lsm-book/src/week1-01-memtable.md b/mini-lsm-book/src/week1-01-memtable.md
index 39fcfdb..261ecc9 100644
--- a/mini-lsm-book/src/week1-01-memtable.md
+++ b/mini-lsm-book/src/week1-01-memtable.md
@@ -1,3 +1,7 @@
+
+
# Memtables

diff --git a/mini-lsm-book/src/week1-02-merge-iterator.md b/mini-lsm-book/src/week1-02-merge-iterator.md
index 550ba6a..61fc6fa 100644
--- a/mini-lsm-book/src/week1-02-merge-iterator.md
+++ b/mini-lsm-book/src/week1-02-merge-iterator.md
@@ -1,3 +1,7 @@
+
+
# Merge Iterator

diff --git a/mini-lsm-book/src/week1-03-block.md b/mini-lsm-book/src/week1-03-block.md
index 9a90f1d..95565b1 100644
--- a/mini-lsm-book/src/week1-03-block.md
+++ b/mini-lsm-book/src/week1-03-block.md
@@ -1,3 +1,7 @@
+
+
# Block

diff --git a/mini-lsm-book/src/week1-04-sst.md b/mini-lsm-book/src/week1-04-sst.md
index 0b136eb..a637713 100644
--- a/mini-lsm-book/src/week1-04-sst.md
+++ b/mini-lsm-book/src/week1-04-sst.md
@@ -1,3 +1,7 @@
+
+
# Sorted String Table (SST)

diff --git a/mini-lsm-book/src/week1-05-read-path.md b/mini-lsm-book/src/week1-05-read-path.md
index 51b3881..3641ffa 100644
--- a/mini-lsm-book/src/week1-05-read-path.md
+++ b/mini-lsm-book/src/week1-05-read-path.md
@@ -1,3 +1,7 @@
+
+
# Read Path

diff --git a/mini-lsm-book/src/week1-06-write-path.md b/mini-lsm-book/src/week1-06-write-path.md
index aa1d30f..123d8e5 100644
--- a/mini-lsm-book/src/week1-06-write-path.md
+++ b/mini-lsm-book/src/week1-06-write-path.md
@@ -1,3 +1,7 @@
+
+
# Write Path

diff --git a/mini-lsm-book/src/week1-07-sst-optimizations.md b/mini-lsm-book/src/week1-07-sst-optimizations.md
index 7abdd79..15f39ab 100644
--- a/mini-lsm-book/src/week1-07-sst-optimizations.md
+++ b/mini-lsm-book/src/week1-07-sst-optimizations.md
@@ -1,3 +1,7 @@
+
+
# Snack Time: SST Optimizations

diff --git a/mini-lsm-book/src/week1-overview.md b/mini-lsm-book/src/week1-overview.md
index 713fed3..0a265d9 100644
--- a/mini-lsm-book/src/week1-overview.md
+++ b/mini-lsm-book/src/week1-overview.md
@@ -1,3 +1,7 @@
+
+
# Week 1 Overview: Mini-LSM

diff --git a/mini-lsm-book/src/week2-01-compaction.md b/mini-lsm-book/src/week2-01-compaction.md
index ff1d313..8cc84a4 100644
--- a/mini-lsm-book/src/week2-01-compaction.md
+++ b/mini-lsm-book/src/week2-01-compaction.md
@@ -1,3 +1,7 @@
+
+
# Compaction Implementation

diff --git a/mini-lsm-book/src/week2-02-simple.md b/mini-lsm-book/src/week2-02-simple.md
index dc8bd36..7d13260 100644
--- a/mini-lsm-book/src/week2-02-simple.md
+++ b/mini-lsm-book/src/week2-02-simple.md
@@ -1,3 +1,7 @@
+
+
# Simple Compaction Strategy

diff --git a/mini-lsm-book/src/week2-03-tiered.md b/mini-lsm-book/src/week2-03-tiered.md
index b3e686d..d542bad 100644
--- a/mini-lsm-book/src/week2-03-tiered.md
+++ b/mini-lsm-book/src/week2-03-tiered.md
@@ -1,3 +1,7 @@
+
+
# Tiered Compaction Strategy

diff --git a/mini-lsm-book/src/week2-04-leveled.md b/mini-lsm-book/src/week2-04-leveled.md
index 5421d1e..1e94365 100644
--- a/mini-lsm-book/src/week2-04-leveled.md
+++ b/mini-lsm-book/src/week2-04-leveled.md
@@ -1,3 +1,7 @@
+
+
# Leveled Compaction Strategy

diff --git a/mini-lsm-book/src/week2-05-manifest.md b/mini-lsm-book/src/week2-05-manifest.md
index d7fb51d..55afb25 100644
--- a/mini-lsm-book/src/week2-05-manifest.md
+++ b/mini-lsm-book/src/week2-05-manifest.md
@@ -1,3 +1,7 @@
+
+
# Manifest

diff --git a/mini-lsm-book/src/week2-06-wal.md b/mini-lsm-book/src/week2-06-wal.md
index 89c87e0..57e02eb 100644
--- a/mini-lsm-book/src/week2-06-wal.md
+++ b/mini-lsm-book/src/week2-06-wal.md
@@ -1,3 +1,7 @@
+
+
# Write-Ahead Log (WAL)

diff --git a/mini-lsm-book/src/week2-07-snacks.md b/mini-lsm-book/src/week2-07-snacks.md
index 94c9cc7..e6b57ed 100644
--- a/mini-lsm-book/src/week2-07-snacks.md
+++ b/mini-lsm-book/src/week2-07-snacks.md
@@ -1,3 +1,7 @@
+
+
# Batch Write and Checksums
diff --git a/mini-lsm-book/src/week2-overview.md b/mini-lsm-book/src/week2-overview.md
index 5ffdb0f..c6a7fad 100644
--- a/mini-lsm-book/src/week2-overview.md
+++ b/mini-lsm-book/src/week2-overview.md
@@ -1,3 +1,7 @@
+
+
# Week 2 Overview: Compaction and Persistence

diff --git a/mini-lsm-book/src/week3-01-ts-key-refactor.md b/mini-lsm-book/src/week3-01-ts-key-refactor.md
index c5cf4eb..fdfeedb 100644
--- a/mini-lsm-book/src/week3-01-ts-key-refactor.md
+++ b/mini-lsm-book/src/week3-01-ts-key-refactor.md
@@ -1,3 +1,7 @@
+
+
# Timestamp Key Encoding + Refactor
In this chapter, you will:
diff --git a/mini-lsm-book/src/week3-02-snapshot-read-part-1.md b/mini-lsm-book/src/week3-02-snapshot-read-part-1.md
index 367cddc..44b4099 100644
--- a/mini-lsm-book/src/week3-02-snapshot-read-part-1.md
+++ b/mini-lsm-book/src/week3-02-snapshot-read-part-1.md
@@ -1,3 +1,7 @@
+
+
# Snapshot Read - Memtables and Timestamps
In this chapter, you will:
diff --git a/mini-lsm-book/src/week3-03-snapshot-read-part-2.md b/mini-lsm-book/src/week3-03-snapshot-read-part-2.md
index c7dd8b7..d3553f7 100644
--- a/mini-lsm-book/src/week3-03-snapshot-read-part-2.md
+++ b/mini-lsm-book/src/week3-03-snapshot-read-part-2.md
@@ -1,3 +1,7 @@
+
+
# Snapshot Read - Engine Read Path and Transaction API
In this chapter, you will:
diff --git a/mini-lsm-book/src/week3-04-watermark.md b/mini-lsm-book/src/week3-04-watermark.md
index 3092147..2d430b9 100644
--- a/mini-lsm-book/src/week3-04-watermark.md
+++ b/mini-lsm-book/src/week3-04-watermark.md
@@ -1,3 +1,7 @@
+
+
# Watermark and Garbage Collection
In this chapter, you will implement necessary structures to track the lowest read timestamp being used by the user, and collect unused versions from SSTs when doing the compaction.
diff --git a/mini-lsm-book/src/week3-05-txn-occ.md b/mini-lsm-book/src/week3-05-txn-occ.md
index ff00ffa..172465f 100644
--- a/mini-lsm-book/src/week3-05-txn-occ.md
+++ b/mini-lsm-book/src/week3-05-txn-occ.md
@@ -1,3 +1,7 @@
+
+
# Transaction and Optimistic Concurrency Control
In this chapter, you will implement all interfaces of `Transaction`. Your implementation will maintain a private workspace for modifications inside a transaction, and commit them in batch, so that all modifications within the transaction will only be visible to the transaction itself until commit. We only check for conflicts (i.e., serializable conflicts) when commit, and this is optimistic concurrency control.
diff --git a/mini-lsm-book/src/week3-06-serializable.md b/mini-lsm-book/src/week3-06-serializable.md
index eeb91a3..875b0d4 100644
--- a/mini-lsm-book/src/week3-06-serializable.md
+++ b/mini-lsm-book/src/week3-06-serializable.md
@@ -1,3 +1,7 @@
+
+
# (A Partial) Serializable Snapshot Isolation
Now, we are going to add a conflict detection algorithm at the transaction commit time, so as to make the engine to have some level of serializable.
diff --git a/mini-lsm-book/src/week3-07-compaction-filter.md b/mini-lsm-book/src/week3-07-compaction-filter.md
index a9a5eea..a2034d6 100644
--- a/mini-lsm-book/src/week3-07-compaction-filter.md
+++ b/mini-lsm-book/src/week3-07-compaction-filter.md
@@ -1,3 +1,7 @@
+
+
# Snack Time: Compaction Filters
Congratulations! You made it there! In the previous chapter, you made your LSM engine multi-version capable, and the users can use transaction APIs to interact with your storage engine. At the end of this week, we will implement some easy but important features of the storage engine. Welcome to Mini-LSM's week 3 snack time!
diff --git a/mini-lsm-book/src/week3-overview.md b/mini-lsm-book/src/week3-overview.md
index 5a6e606..29e62c8 100644
--- a/mini-lsm-book/src/week3-overview.md
+++ b/mini-lsm-book/src/week3-overview.md
@@ -1,3 +1,7 @@
+
+
# Week 3 Overview: Multi-Version Concurrency Control
In this part, you will implement MVCC over the LSM engine that you have built in the previous two weeks. We will add timestamp encoding in the keys to maintain multiple versions of a key, and change some part of the engine to ensure old data are either retained or garbage-collected based on whether there are users reading an old version.
diff --git a/mini-lsm-book/src/week4-overview.md b/mini-lsm-book/src/week4-overview.md
index fb67b2b..b5aa7d1 100644
--- a/mini-lsm-book/src/week4-overview.md
+++ b/mini-lsm-book/src/week4-overview.md
@@ -1,3 +1,7 @@
+
+
# The Rest of Your Life (TBD)
This is an advanced part that deep dives into optimizations and applications of the LSM storage engine and will make your implementation more production-ready. We are still planning on the content, and this part will not be publicly available in near future.
diff --git a/mini-lsm-mvcc/README.md b/mini-lsm-mvcc/README.md
index 3931a6c..8ade269 100644
--- a/mini-lsm-mvcc/README.md
+++ b/mini-lsm-mvcc/README.md
@@ -1,3 +1,19 @@
+
+
# Week 3 Solution
This is the solution of Mini-LSM week 3 with MVCC implementation.
diff --git a/mini-lsm-mvcc/src/bin/wrapper.rs b/mini-lsm-mvcc/src/bin/wrapper.rs
index 0872c5e..4403729 100644
--- a/mini-lsm-mvcc/src/bin/wrapper.rs
+++ b/mini-lsm-mvcc/src/bin/wrapper.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod mini_lsm_wrapper {
pub use mini_lsm_mvcc::*;
}
diff --git a/mini-lsm-mvcc/src/block.rs b/mini-lsm-mvcc/src/block.rs
index 932c4c6..3547c51 100644
--- a/mini-lsm-mvcc/src/block.rs
+++ b/mini-lsm-mvcc/src/block.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod builder;
mod iterator;
diff --git a/mini-lsm-mvcc/src/block/builder.rs b/mini-lsm-mvcc/src/block/builder.rs
index f41eee9..9fe9e14 100644
--- a/mini-lsm-mvcc/src/block/builder.rs
+++ b/mini-lsm-mvcc/src/block/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use bytes::BufMut;
use crate::key::{KeySlice, KeyVec};
diff --git a/mini-lsm-mvcc/src/block/iterator.rs b/mini-lsm-mvcc/src/block/iterator.rs
index 20006d9..46d1415 100644
--- a/mini-lsm-mvcc/src/block/iterator.rs
+++ b/mini-lsm-mvcc/src/block/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use bytes::Buf;
diff --git a/mini-lsm-mvcc/src/compact.rs b/mini-lsm-mvcc/src/compact.rs
index 3b5bd1e..83e9654 100644
--- a/mini-lsm-mvcc/src/compact.rs
+++ b/mini-lsm-mvcc/src/compact.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod leveled;
mod simple_leveled;
mod tiered;
diff --git a/mini-lsm-mvcc/src/compact/leveled.rs b/mini-lsm-mvcc/src/compact/leveled.rs
index b4c28e2..f1948d1 100644
--- a/mini-lsm-mvcc/src/compact/leveled.rs
+++ b/mini-lsm-mvcc/src/compact/leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashSet;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm-mvcc/src/compact/simple_leveled.rs b/mini-lsm-mvcc/src/compact/simple_leveled.rs
index f701c47..7747b88 100644
--- a/mini-lsm-mvcc/src/compact/simple_leveled.rs
+++ b/mini-lsm-mvcc/src/compact/simple_leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashSet;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm-mvcc/src/compact/tiered.rs b/mini-lsm-mvcc/src/compact/tiered.rs
index 5e9bac2..56ace89 100644
--- a/mini-lsm-mvcc/src/compact/tiered.rs
+++ b/mini-lsm-mvcc/src/compact/tiered.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm-mvcc/src/iterators.rs b/mini-lsm-mvcc/src/iterators.rs
index a0da803..2dd1d17 100644
--- a/mini-lsm-mvcc/src/iterators.rs
+++ b/mini-lsm-mvcc/src/iterators.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod concat_iterator;
pub mod merge_iterator;
pub mod two_merge_iterator;
diff --git a/mini-lsm-mvcc/src/iterators/concat_iterator.rs b/mini-lsm-mvcc/src/iterators/concat_iterator.rs
index e6203f2..129076b 100644
--- a/mini-lsm-mvcc/src/iterators/concat_iterator.rs
+++ b/mini-lsm-mvcc/src/iterators/concat_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use anyhow::Result;
diff --git a/mini-lsm-mvcc/src/iterators/merge_iterator.rs b/mini-lsm-mvcc/src/iterators/merge_iterator.rs
index d0d6206..a4cc3c0 100644
--- a/mini-lsm-mvcc/src/iterators/merge_iterator.rs
+++ b/mini-lsm-mvcc/src/iterators/merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::cmp::{self};
use std::collections::binary_heap::PeekMut;
use std::collections::BinaryHeap;
diff --git a/mini-lsm-mvcc/src/iterators/two_merge_iterator.rs b/mini-lsm-mvcc/src/iterators/two_merge_iterator.rs
index 2ff2ce3..a6feaa9 100644
--- a/mini-lsm-mvcc/src/iterators/two_merge_iterator.rs
+++ b/mini-lsm-mvcc/src/iterators/two_merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use anyhow::Result;
use super::StorageIterator;
diff --git a/mini-lsm-mvcc/src/key.rs b/mini-lsm-mvcc/src/key.rs
index 79329c7..9adc386 100644
--- a/mini-lsm-mvcc/src/key.rs
+++ b/mini-lsm-mvcc/src/key.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{cmp::Reverse, fmt::Debug};
use bytes::Bytes;
diff --git a/mini-lsm-mvcc/src/lib.rs b/mini-lsm-mvcc/src/lib.rs
index 79341ab..76e86b2 100644
--- a/mini-lsm-mvcc/src/lib.rs
+++ b/mini-lsm-mvcc/src/lib.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod block;
pub mod compact;
pub mod debug;
diff --git a/mini-lsm-mvcc/src/lsm_iterator.rs b/mini-lsm-mvcc/src/lsm_iterator.rs
index 79c7c7c..9d84e66 100644
--- a/mini-lsm-mvcc/src/lsm_iterator.rs
+++ b/mini-lsm-mvcc/src/lsm_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use anyhow::{bail, Result};
diff --git a/mini-lsm-mvcc/src/lsm_storage.rs b/mini-lsm-mvcc/src/lsm_storage.rs
index a136f48..77247dd 100644
--- a/mini-lsm-mvcc/src/lsm_storage.rs
+++ b/mini-lsm-mvcc/src/lsm_storage.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::{BTreeSet, HashMap};
use std::fs::File;
use std::ops::Bound;
diff --git a/mini-lsm-mvcc/src/manifest.rs b/mini-lsm-mvcc/src/manifest.rs
index c28a99b..f13ff5f 100644
--- a/mini-lsm-mvcc/src/manifest.rs
+++ b/mini-lsm-mvcc/src/manifest.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
use std::path::Path;
diff --git a/mini-lsm-mvcc/src/mem_table.rs b/mini-lsm-mvcc/src/mem_table.rs
index d0fe5d9..79480cd 100644
--- a/mini-lsm-mvcc/src/mem_table.rs
+++ b/mini-lsm-mvcc/src/mem_table.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use std::path::Path;
use std::sync::atomic::AtomicUsize;
diff --git a/mini-lsm-mvcc/src/mvcc.rs b/mini-lsm-mvcc/src/mvcc.rs
index ffcbbcb..7f9f02a 100644
--- a/mini-lsm-mvcc/src/mvcc.rs
+++ b/mini-lsm-mvcc/src/mvcc.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-mvcc/src/mvcc/txn.rs b/mini-lsm-mvcc/src/mvcc/txn.rs
index 9595bd6..f1adbb9 100644
--- a/mini-lsm-mvcc/src/mvcc/txn.rs
+++ b/mini-lsm-mvcc/src/mvcc/txn.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{
collections::HashSet,
ops::Bound,
diff --git a/mini-lsm-mvcc/src/mvcc/watermark.rs b/mini-lsm-mvcc/src/mvcc/watermark.rs
index 668c919..2968d0c 100644
--- a/mini-lsm-mvcc/src/mvcc/watermark.rs
+++ b/mini-lsm-mvcc/src/mvcc/watermark.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::BTreeMap;
pub struct Watermark {
diff --git a/mini-lsm-mvcc/src/table.rs b/mini-lsm-mvcc/src/table.rs
index 00f1088..5d5747f 100644
--- a/mini-lsm-mvcc/src/table.rs
+++ b/mini-lsm-mvcc/src/table.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub(crate) mod bloom;
mod builder;
mod iterator;
diff --git a/mini-lsm-mvcc/src/table/bloom.rs b/mini-lsm-mvcc/src/table/bloom.rs
index 2fb5622..ddeac13 100644
--- a/mini-lsm-mvcc/src/table/bloom.rs
+++ b/mini-lsm-mvcc/src/table/bloom.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
// Copyright 2021 TiKV Project Authors. Licensed under Apache-2.0.
use anyhow::{bail, Result};
diff --git a/mini-lsm-mvcc/src/table/builder.rs b/mini-lsm-mvcc/src/table/builder.rs
index c85561e..a668f83 100644
--- a/mini-lsm-mvcc/src/table/builder.rs
+++ b/mini-lsm-mvcc/src/table/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::path::Path;
use std::sync::Arc;
diff --git a/mini-lsm-mvcc/src/table/iterator.rs b/mini-lsm-mvcc/src/table/iterator.rs
index 522f1a0..0c81c5a 100644
--- a/mini-lsm-mvcc/src/table/iterator.rs
+++ b/mini-lsm-mvcc/src/table/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use anyhow::Result;
diff --git a/mini-lsm-mvcc/src/tests.rs b/mini-lsm-mvcc/src/tests.rs
index 7b12c11..165766b 100644
--- a/mini-lsm-mvcc/src/tests.rs
+++ b/mini-lsm-mvcc/src/tests.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod harness;
mod week1_day1;
mod week1_day2;
diff --git a/mini-lsm-mvcc/src/tests/week3_day1.rs b/mini-lsm-mvcc/src/tests/week3_day1.rs
index df55979..12b20d9 100644
--- a/mini-lsm-mvcc/src/tests/week3_day1.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day1.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use bytes::Bytes;
diff --git a/mini-lsm-mvcc/src/tests/week3_day2.rs b/mini-lsm-mvcc/src/tests/week3_day2.rs
index df1f3ce..b80a024 100644
--- a/mini-lsm-mvcc/src/tests/week3_day2.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day2.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::time::Duration;
use tempfile::tempdir;
diff --git a/mini-lsm-mvcc/src/tests/week3_day3.rs b/mini-lsm-mvcc/src/tests/week3_day3.rs
index a0b2532..23ec980 100644
--- a/mini-lsm-mvcc/src/tests/week3_day3.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day3.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use bytes::Bytes;
diff --git a/mini-lsm-mvcc/src/tests/week3_day4.rs b/mini-lsm-mvcc/src/tests/week3_day4.rs
index edab25f..a2a4eaa 100644
--- a/mini-lsm-mvcc/src/tests/week3_day4.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day4.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use bytes::Bytes;
use tempfile::tempdir;
diff --git a/mini-lsm-mvcc/src/tests/week3_day5.rs b/mini-lsm-mvcc/src/tests/week3_day5.rs
index 6a6b3bd..195cdf2 100644
--- a/mini-lsm-mvcc/src/tests/week3_day5.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day5.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use bytes::Bytes;
diff --git a/mini-lsm-mvcc/src/tests/week3_day6.rs b/mini-lsm-mvcc/src/tests/week3_day6.rs
index aa194a3..8eb0d58 100644
--- a/mini-lsm-mvcc/src/tests/week3_day6.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day6.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use bytes::Bytes;
diff --git a/mini-lsm-mvcc/src/tests/week3_day7.rs b/mini-lsm-mvcc/src/tests/week3_day7.rs
index bfbc05d..f2d75a1 100644
--- a/mini-lsm-mvcc/src/tests/week3_day7.rs
+++ b/mini-lsm-mvcc/src/tests/week3_day7.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use bytes::Bytes;
use tempfile::tempdir;
diff --git a/mini-lsm-mvcc/src/wal.rs b/mini-lsm-mvcc/src/wal.rs
index f333ce7..d89b6b1 100644
--- a/mini-lsm-mvcc/src/wal.rs
+++ b/mini-lsm-mvcc/src/wal.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fs::{File, OpenOptions};
use std::hash::Hasher;
use std::io::{BufWriter, Read, Write};
diff --git a/mini-lsm-starter/src/bin/compaction-simulator.rs b/mini-lsm-starter/src/bin/compaction-simulator.rs
index 53a7a1d..a21ace9 100644
--- a/mini-lsm-starter/src/bin/compaction-simulator.rs
+++ b/mini-lsm-starter/src/bin/compaction-simulator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod wrapper;
use wrapper::mini_lsm_wrapper;
diff --git a/mini-lsm-starter/src/bin/mini-lsm-cli.rs b/mini-lsm-starter/src/bin/mini-lsm-cli.rs
index f01d363..760b9b0 100644
--- a/mini-lsm-starter/src/bin/mini-lsm-cli.rs
+++ b/mini-lsm-starter/src/bin/mini-lsm-cli.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod wrapper;
use rustyline::DefaultEditor;
diff --git a/mini-lsm-starter/src/bin/wrapper.rs b/mini-lsm-starter/src/bin/wrapper.rs
index 81e47f3..6c78ba3 100644
--- a/mini-lsm-starter/src/bin/wrapper.rs
+++ b/mini-lsm-starter/src/bin/wrapper.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod mini_lsm_wrapper {
pub use mini_lsm_starter::*;
}
diff --git a/mini-lsm-starter/src/block.rs b/mini-lsm-starter/src/block.rs
index 41e3df2..2d7e3bd 100644
--- a/mini-lsm-starter/src/block.rs
+++ b/mini-lsm-starter/src/block.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/block/builder.rs b/mini-lsm-starter/src/block/builder.rs
index 4c83959..1f41501 100644
--- a/mini-lsm-starter/src/block/builder.rs
+++ b/mini-lsm-starter/src/block/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/block/iterator.rs b/mini-lsm-starter/src/block/iterator.rs
index d2d867e..28b6fde 100644
--- a/mini-lsm-starter/src/block/iterator.rs
+++ b/mini-lsm-starter/src/block/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/compact.rs b/mini-lsm-starter/src/compact.rs
index f7646c7..db75125 100644
--- a/mini-lsm-starter/src/compact.rs
+++ b/mini-lsm-starter/src/compact.rs
@@ -1,4 +1,19 @@
-#![allow(dead_code)] // REMOVE THIS LINE after fully implementing this functionality
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
+#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
mod leveled;
mod simple_leveled;
diff --git a/mini-lsm-starter/src/compact/leveled.rs b/mini-lsm-starter/src/compact/leveled.rs
index 6cd8bc7..293219b 100644
--- a/mini-lsm-starter/src/compact/leveled.rs
+++ b/mini-lsm-starter/src/compact/leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use serde::{Deserialize, Serialize};
use crate::lsm_storage::LsmStorageState;
diff --git a/mini-lsm-starter/src/compact/simple_leveled.rs b/mini-lsm-starter/src/compact/simple_leveled.rs
index 1c008ce..53c4cfa 100644
--- a/mini-lsm-starter/src/compact/simple_leveled.rs
+++ b/mini-lsm-starter/src/compact/simple_leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use serde::{Deserialize, Serialize};
use crate::lsm_storage::LsmStorageState;
diff --git a/mini-lsm-starter/src/compact/tiered.rs b/mini-lsm-starter/src/compact/tiered.rs
index b74edd0..d15d0eb 100644
--- a/mini-lsm-starter/src/compact/tiered.rs
+++ b/mini-lsm-starter/src/compact/tiered.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use serde::{Deserialize, Serialize};
use crate::lsm_storage::LsmStorageState;
diff --git a/mini-lsm-starter/src/debug.rs b/mini-lsm-starter/src/debug.rs
index c9eab3d..83692da 100644
--- a/mini-lsm-starter/src/debug.rs
+++ b/mini-lsm-starter/src/debug.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use crate::lsm_storage::{LsmStorageInner, MiniLsm};
impl LsmStorageInner {
diff --git a/mini-lsm-starter/src/iterators.rs b/mini-lsm-starter/src/iterators.rs
index a0da803..2dd1d17 100644
--- a/mini-lsm-starter/src/iterators.rs
+++ b/mini-lsm-starter/src/iterators.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod concat_iterator;
pub mod merge_iterator;
pub mod two_merge_iterator;
diff --git a/mini-lsm-starter/src/iterators/concat_iterator.rs b/mini-lsm-starter/src/iterators/concat_iterator.rs
index 8cef715..a0b7b48 100644
--- a/mini-lsm-starter/src/iterators/concat_iterator.rs
+++ b/mini-lsm-starter/src/iterators/concat_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/iterators/merge_iterator.rs b/mini-lsm-starter/src/iterators/merge_iterator.rs
index 78470d0..26ff1e1 100644
--- a/mini-lsm-starter/src/iterators/merge_iterator.rs
+++ b/mini-lsm-starter/src/iterators/merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/iterators/two_merge_iterator.rs b/mini-lsm-starter/src/iterators/two_merge_iterator.rs
index bb7b4a8..a6769e5 100644
--- a/mini-lsm-starter/src/iterators/two_merge_iterator.rs
+++ b/mini-lsm-starter/src/iterators/two_merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/key.rs b/mini-lsm-starter/src/key.rs
index f459ee7..c331297 100644
--- a/mini-lsm-starter/src/key.rs
+++ b/mini-lsm-starter/src/key.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fmt::Debug;
use bytes::Bytes;
diff --git a/mini-lsm-starter/src/lib.rs b/mini-lsm-starter/src/lib.rs
index 79341ab..76e86b2 100644
--- a/mini-lsm-starter/src/lib.rs
+++ b/mini-lsm-starter/src/lib.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod block;
pub mod compact;
pub mod debug;
diff --git a/mini-lsm-starter/src/lsm_iterator.rs b/mini-lsm-starter/src/lsm_iterator.rs
index 8ab5652..68f7547 100644
--- a/mini-lsm-starter/src/lsm_iterator.rs
+++ b/mini-lsm-starter/src/lsm_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/lsm_storage.rs b/mini-lsm-starter/src/lsm_storage.rs
index e99fec5..503b130 100644
--- a/mini-lsm-starter/src/lsm_storage.rs
+++ b/mini-lsm-starter/src/lsm_storage.rs
@@ -1,4 +1,19 @@
-#![allow(dead_code)] // REMOVE THIS LINE after fully implementing this functionality
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
+#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use std::collections::HashMap;
use std::ops::Bound;
diff --git a/mini-lsm-starter/src/manifest.rs b/mini-lsm-starter/src/manifest.rs
index e9b0059..1c912d4 100644
--- a/mini-lsm-starter/src/manifest.rs
+++ b/mini-lsm-starter/src/manifest.rs
@@ -1,4 +1,19 @@
-#![allow(dead_code)] // REMOVE THIS LINE after fully implementing this functionality
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
+#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use std::fs::File;
use std::path::Path;
diff --git a/mini-lsm-starter/src/mem_table.rs b/mini-lsm-starter/src/mem_table.rs
index dc4fa5a..b847d90 100644
--- a/mini-lsm-starter/src/mem_table.rs
+++ b/mini-lsm-starter/src/mem_table.rs
@@ -1,4 +1,19 @@
-#![allow(dead_code)] // REMOVE THIS LINE after fully implementing this functionality
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
+#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use std::ops::Bound;
use std::path::Path;
diff --git a/mini-lsm-starter/src/mvcc.rs b/mini-lsm-starter/src/mvcc.rs
index 28481f4..b26ba0e 100644
--- a/mini-lsm-starter/src/mvcc.rs
+++ b/mini-lsm-starter/src/mvcc.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/mvcc/txn.rs b/mini-lsm-starter/src/mvcc/txn.rs
index a598de4..22adb68 100644
--- a/mini-lsm-starter/src/mvcc/txn.rs
+++ b/mini-lsm-starter/src/mvcc/txn.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/mvcc/watermark.rs b/mini-lsm-starter/src/mvcc/watermark.rs
index 4bbb4fa..e4d80ad 100644
--- a/mini-lsm-starter/src/mvcc/watermark.rs
+++ b/mini-lsm-starter/src/mvcc/watermark.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/table.rs b/mini-lsm-starter/src/table.rs
index 02baaa2..5016385 100644
--- a/mini-lsm-starter/src/table.rs
+++ b/mini-lsm-starter/src/table.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/table/bloom.rs b/mini-lsm-starter/src/table/bloom.rs
index 239a9e4..6eeef2d 100644
--- a/mini-lsm-starter/src/table/bloom.rs
+++ b/mini-lsm-starter/src/table/bloom.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
// Copyright 2021 TiKV Project Authors. Licensed under Apache-2.0.
use anyhow::Result;
diff --git a/mini-lsm-starter/src/table/builder.rs b/mini-lsm-starter/src/table/builder.rs
index cea3d08..68cd1a4 100644
--- a/mini-lsm-starter/src/table/builder.rs
+++ b/mini-lsm-starter/src/table/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/table/iterator.rs b/mini-lsm-starter/src/table/iterator.rs
index 32b06a2..a659994 100644
--- a/mini-lsm-starter/src/table/iterator.rs
+++ b/mini-lsm-starter/src/table/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
diff --git a/mini-lsm-starter/src/tests.rs b/mini-lsm-starter/src/tests.rs
index 688adfa..229c3b7 100644
--- a/mini-lsm-starter/src/tests.rs
+++ b/mini-lsm-starter/src/tests.rs
@@ -1,2 +1,16 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
//! DO NOT MODIFY -- Mini-LSM tests modules
//! This file will be automatically rewritten by the copy-test command.
diff --git a/mini-lsm-starter/src/wal.rs b/mini-lsm-starter/src/wal.rs
index ad7d850..2eda955 100644
--- a/mini-lsm-starter/src/wal.rs
+++ b/mini-lsm-starter/src/wal.rs
@@ -1,4 +1,20 @@
-#![allow(dead_code)] // REMOVE THIS LINE after fully implementing this functionality
+#![allow(dead_code)]
+// REMOVE THIS LINE after fully implementing this functionality
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+#![allow(unused_variables)] // TODO(you): remove this lint after implementing this mod
+#![allow(dead_code)] // TODO(you): remove this lint after implementing this mod
use std::fs::File;
use std::io::BufWriter;
diff --git a/mini-lsm/src/bin/wrapper.rs b/mini-lsm/src/bin/wrapper.rs
index 9b8a4ec..c0ee26a 100644
--- a/mini-lsm/src/bin/wrapper.rs
+++ b/mini-lsm/src/bin/wrapper.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod mini_lsm_wrapper {
pub use mini_lsm::*;
}
diff --git a/mini-lsm/src/block.rs b/mini-lsm/src/block.rs
index 932c4c6..3547c51 100644
--- a/mini-lsm/src/block.rs
+++ b/mini-lsm/src/block.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod builder;
mod iterator;
diff --git a/mini-lsm/src/block/builder.rs b/mini-lsm/src/block/builder.rs
index 4d28a75..bd57972 100644
--- a/mini-lsm/src/block/builder.rs
+++ b/mini-lsm/src/block/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use bytes::BufMut;
use crate::key::{KeySlice, KeyVec};
diff --git a/mini-lsm/src/block/iterator.rs b/mini-lsm/src/block/iterator.rs
index 0df3b9a..aa1afcb 100644
--- a/mini-lsm/src/block/iterator.rs
+++ b/mini-lsm/src/block/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use bytes::Buf;
diff --git a/mini-lsm/src/compact.rs b/mini-lsm/src/compact.rs
index 22fb932..3212b98 100644
--- a/mini-lsm/src/compact.rs
+++ b/mini-lsm/src/compact.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod leveled;
mod simple_leveled;
mod tiered;
diff --git a/mini-lsm/src/compact/leveled.rs b/mini-lsm/src/compact/leveled.rs
index 5cc1609..71925a5 100644
--- a/mini-lsm/src/compact/leveled.rs
+++ b/mini-lsm/src/compact/leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashSet;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm/src/compact/simple_leveled.rs b/mini-lsm/src/compact/simple_leveled.rs
index fa4f5fc..2b2bbdb 100644
--- a/mini-lsm/src/compact/simple_leveled.rs
+++ b/mini-lsm/src/compact/simple_leveled.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashSet;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm/src/compact/tiered.rs b/mini-lsm/src/compact/tiered.rs
index 5e9bac2..56ace89 100644
--- a/mini-lsm/src/compact/tiered.rs
+++ b/mini-lsm/src/compact/tiered.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::HashMap;
use serde::{Deserialize, Serialize};
diff --git a/mini-lsm/src/iterators.rs b/mini-lsm/src/iterators.rs
index a0da803..2dd1d17 100644
--- a/mini-lsm/src/iterators.rs
+++ b/mini-lsm/src/iterators.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod concat_iterator;
pub mod merge_iterator;
pub mod two_merge_iterator;
diff --git a/mini-lsm/src/iterators/concat_iterator.rs b/mini-lsm/src/iterators/concat_iterator.rs
index e6203f2..129076b 100644
--- a/mini-lsm/src/iterators/concat_iterator.rs
+++ b/mini-lsm/src/iterators/concat_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use anyhow::Result;
diff --git a/mini-lsm/src/iterators/merge_iterator.rs b/mini-lsm/src/iterators/merge_iterator.rs
index d0d6206..a4cc3c0 100644
--- a/mini-lsm/src/iterators/merge_iterator.rs
+++ b/mini-lsm/src/iterators/merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::cmp::{self};
use std::collections::binary_heap::PeekMut;
use std::collections::BinaryHeap;
diff --git a/mini-lsm/src/iterators/two_merge_iterator.rs b/mini-lsm/src/iterators/two_merge_iterator.rs
index 57bf77b..a85fd73 100644
--- a/mini-lsm/src/iterators/two_merge_iterator.rs
+++ b/mini-lsm/src/iterators/two_merge_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use anyhow::Result;
use super::StorageIterator;
diff --git a/mini-lsm/src/key.rs b/mini-lsm/src/key.rs
index f459ee7..c331297 100644
--- a/mini-lsm/src/key.rs
+++ b/mini-lsm/src/key.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fmt::Debug;
use bytes::Bytes;
diff --git a/mini-lsm/src/lib.rs b/mini-lsm/src/lib.rs
index 79341ab..76e86b2 100644
--- a/mini-lsm/src/lib.rs
+++ b/mini-lsm/src/lib.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub mod block;
pub mod compact;
pub mod debug;
diff --git a/mini-lsm/src/lsm_iterator.rs b/mini-lsm/src/lsm_iterator.rs
index 0722fd7..84cbc47 100644
--- a/mini-lsm/src/lsm_iterator.rs
+++ b/mini-lsm/src/lsm_iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use anyhow::{bail, Result};
diff --git a/mini-lsm/src/lsm_storage.rs b/mini-lsm/src/lsm_storage.rs
index 1162a78..fc611c7 100644
--- a/mini-lsm/src/lsm_storage.rs
+++ b/mini-lsm/src/lsm_storage.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::collections::{BTreeSet, HashMap};
use std::fs::File;
use std::ops::Bound;
diff --git a/mini-lsm/src/manifest.rs b/mini-lsm/src/manifest.rs
index c28a99b..f13ff5f 100644
--- a/mini-lsm/src/manifest.rs
+++ b/mini-lsm/src/manifest.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fs::{File, OpenOptions};
use std::io::{Read, Write};
use std::path::Path;
diff --git a/mini-lsm/src/mem_table.rs b/mini-lsm/src/mem_table.rs
index de9a5d9..5c89150 100644
--- a/mini-lsm/src/mem_table.rs
+++ b/mini-lsm/src/mem_table.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use std::path::Path;
use std::sync::atomic::AtomicUsize;
diff --git a/mini-lsm/src/table.rs b/mini-lsm/src/table.rs
index 34e2287..10afeae 100644
--- a/mini-lsm/src/table.rs
+++ b/mini-lsm/src/table.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
pub(crate) mod bloom;
mod builder;
mod iterator;
diff --git a/mini-lsm/src/table/bloom.rs b/mini-lsm/src/table/bloom.rs
index 2fb5622..ddeac13 100644
--- a/mini-lsm/src/table/bloom.rs
+++ b/mini-lsm/src/table/bloom.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
// Copyright 2021 TiKV Project Authors. Licensed under Apache-2.0.
use anyhow::{bail, Result};
diff --git a/mini-lsm/src/table/builder.rs b/mini-lsm/src/table/builder.rs
index 9bc25b2..c6fde3f 100644
--- a/mini-lsm/src/table/builder.rs
+++ b/mini-lsm/src/table/builder.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::path::Path;
use std::sync::Arc;
diff --git a/mini-lsm/src/table/iterator.rs b/mini-lsm/src/table/iterator.rs
index 522f1a0..0c81c5a 100644
--- a/mini-lsm/src/table/iterator.rs
+++ b/mini-lsm/src/table/iterator.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use anyhow::Result;
diff --git a/mini-lsm/src/tests.rs b/mini-lsm/src/tests.rs
index 51d4f13..a77781a 100644
--- a/mini-lsm/src/tests.rs
+++ b/mini-lsm/src/tests.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
mod harness;
mod week1_day1;
mod week1_day2;
diff --git a/mini-lsm/src/tests/harness.rs b/mini-lsm/src/tests/harness.rs
index 0553b03..ba4a2eb 100644
--- a/mini-lsm/src/tests/harness.rs
+++ b/mini-lsm/src/tests/harness.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{
collections::BTreeMap, ops::Bound, os::unix::fs::MetadataExt, path::Path, sync::Arc,
time::Duration,
diff --git a/mini-lsm/src/tests/week1_day1.rs b/mini-lsm/src/tests/week1_day1.rs
index c024c5e..66a434b 100644
--- a/mini-lsm/src/tests/week1_day1.rs
+++ b/mini-lsm/src/tests/week1_day1.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use tempfile::tempdir;
diff --git a/mini-lsm/src/tests/week1_day2.rs b/mini-lsm/src/tests/week1_day2.rs
index 92b5730..6cb42e0 100644
--- a/mini-lsm/src/tests/week1_day2.rs
+++ b/mini-lsm/src/tests/week1_day2.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{ops::Bound, sync::Arc};
use bytes::Bytes;
diff --git a/mini-lsm/src/tests/week1_day3.rs b/mini-lsm/src/tests/week1_day3.rs
index 91deea7..5ed5504 100644
--- a/mini-lsm/src/tests/week1_day3.rs
+++ b/mini-lsm/src/tests/week1_day3.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use bytes::Bytes;
diff --git a/mini-lsm/src/tests/week1_day4.rs b/mini-lsm/src/tests/week1_day4.rs
index efbb100..7a82cf6 100644
--- a/mini-lsm/src/tests/week1_day4.rs
+++ b/mini-lsm/src/tests/week1_day4.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::sync::Arc;
use bytes::Bytes;
diff --git a/mini-lsm/src/tests/week1_day5.rs b/mini-lsm/src/tests/week1_day5.rs
index 0eaf3e0..fcd2233 100644
--- a/mini-lsm/src/tests/week1_day5.rs
+++ b/mini-lsm/src/tests/week1_day5.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::ops::Bound;
use std::sync::Arc;
diff --git a/mini-lsm/src/tests/week1_day6.rs b/mini-lsm/src/tests/week1_day6.rs
index cb6a9c8..d951414 100644
--- a/mini-lsm/src/tests/week1_day6.rs
+++ b/mini-lsm/src/tests/week1_day6.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{ops::Bound, sync::Arc, time::Duration};
use bytes::Bytes;
diff --git a/mini-lsm/src/tests/week1_day7.rs b/mini-lsm/src/tests/week1_day7.rs
index d510a57..b2b6c3c 100644
--- a/mini-lsm/src/tests/week1_day7.rs
+++ b/mini-lsm/src/tests/week1_day7.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use tempfile::tempdir;
use crate::{
diff --git a/mini-lsm/src/tests/week2_day1.rs b/mini-lsm/src/tests/week2_day1.rs
index 15128f2..ee44175 100644
--- a/mini-lsm/src/tests/week2_day1.rs
+++ b/mini-lsm/src/tests/week2_day1.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::{ops::Bound, path::Path, sync::Arc};
use self::harness::{check_iter_result_by_key, check_lsm_iter_result_by_key, sync};
diff --git a/mini-lsm/src/tests/week2_day2.rs b/mini-lsm/src/tests/week2_day2.rs
index 5064afc..ed78516 100644
--- a/mini-lsm/src/tests/week2_day2.rs
+++ b/mini-lsm/src/tests/week2_day2.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use tempfile::tempdir;
use crate::{
diff --git a/mini-lsm/src/tests/week2_day3.rs b/mini-lsm/src/tests/week2_day3.rs
index e37d88b..91add8f 100644
--- a/mini-lsm/src/tests/week2_day3.rs
+++ b/mini-lsm/src/tests/week2_day3.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use tempfile::tempdir;
use crate::{
diff --git a/mini-lsm/src/tests/week2_day4.rs b/mini-lsm/src/tests/week2_day4.rs
index a2fd900..e43152d 100644
--- a/mini-lsm/src/tests/week2_day4.rs
+++ b/mini-lsm/src/tests/week2_day4.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use tempfile::tempdir;
use crate::{
diff --git a/mini-lsm/src/tests/week2_day5.rs b/mini-lsm/src/tests/week2_day5.rs
index 26e7cdd..0901b7e 100644
--- a/mini-lsm/src/tests/week2_day5.rs
+++ b/mini-lsm/src/tests/week2_day5.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::time::Duration;
use bytes::BufMut;
diff --git a/mini-lsm/src/tests/week2_day6.rs b/mini-lsm/src/tests/week2_day6.rs
index 612f45e..dd91756 100644
--- a/mini-lsm/src/tests/week2_day6.rs
+++ b/mini-lsm/src/tests/week2_day6.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use tempfile::tempdir;
use crate::{
diff --git a/mini-lsm/src/wal.rs b/mini-lsm/src/wal.rs
index a4771d3..08f615c 100644
--- a/mini-lsm/src/wal.rs
+++ b/mini-lsm/src/wal.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::fs::{File, OpenOptions};
use std::hash::Hasher;
use std::io::{BufWriter, Read, Write};
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index 18bd1bc..5aaa880 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -1,3 +1,17 @@
+// Copyright (c) 2022-2025 Alex Chi Z
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
use std::path::{Path, PathBuf};
use anyhow::{anyhow, Result};