Skip to content

Commit e3b871c

Browse files
committed
use url as stream id
1 parent fbdcdcc commit e3b871c

File tree

6 files changed

+26
-83
lines changed

6 files changed

+26
-83
lines changed

src/inspector/io_agent.cc

Lines changed: 6 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,23 +18,7 @@ DispatchResponse IoAgent::read(const String& in_handle,
1818
Maybe<int> in_size,
1919
String* out_data,
2020
bool* out_eof) {
21-
std::string in_handle_str = in_handle;
22-
uint64_t stream_id = 0;
23-
bool is_number =
24-
std::all_of(in_handle_str.begin(), in_handle_str.end(), ::isdigit);
25-
if (!is_number) {
26-
*out_data = "";
27-
*out_eof = true;
28-
return DispatchResponse::Success();
29-
}
30-
stream_id = std::stoull(in_handle_str);
31-
32-
std::string url = network_resource_manager_->GetUrlForStreamId(stream_id);
33-
if (url.empty()) {
34-
*out_data = "";
35-
*out_eof = true;
36-
return DispatchResponse::Success();
37-
}
21+
std::string url = in_handle;
3822
std::string txt = network_resource_manager_->Get(url);
3923
std::string_view txt_view(txt);
4024

@@ -43,8 +27,8 @@ DispatchResponse IoAgent::read(const String& in_handle,
4327
if (in_offset.isJust()) {
4428
offset = in_offset.fromJust();
4529
offset_was_specified = true;
46-
} else if (offset_map_.find(stream_id) != offset_map_.end()) {
47-
offset = offset_map_[stream_id];
30+
} else if (offset_map_.find(url) != offset_map_.end()) {
31+
offset = offset_map_[url];
4832
}
4933
int size = 1 << 20;
5034
if (in_size.isJust()) {
@@ -55,7 +39,7 @@ DispatchResponse IoAgent::read(const String& in_handle,
5539
out_data->assign(out_view.data(), out_view.size());
5640
*out_eof = false;
5741
if (!offset_was_specified) {
58-
offset_map_[stream_id] = offset + size;
42+
offset_map_[url] = offset + size;
5943
}
6044
} else {
6145
*out_data = "";
@@ -66,15 +50,8 @@ DispatchResponse IoAgent::read(const String& in_handle,
6650
}
6751

6852
DispatchResponse IoAgent::close(const String& in_handle) {
69-
std::string in_handle_str = in_handle;
70-
uint64_t stream_id = 0;
71-
bool is_number =
72-
std::all_of(in_handle_str.begin(), in_handle_str.end(), ::isdigit);
73-
if (is_number) {
74-
stream_id = std::stoull(in_handle_str);
75-
// Use accessor to erase resource and mapping by stream id
76-
network_resource_manager_->EraseByStreamId(stream_id);
77-
}
53+
std::string url = in_handle;
54+
network_resource_manager_->Erase(url);
7855
return DispatchResponse::Success();
7956
}
8057
} // namespace node::inspector::protocol

src/inspector/io_agent.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ class IoAgent : public IO::Backend {
2222

2323
private:
2424
std::shared_ptr<IO::Frontend> frontend_;
25-
std::unordered_map<int, int> offset_map_ = {}; // Maps stream_id to offset
25+
std::unordered_map<std::string, int> offset_map_ =
26+
{}; // Maps stream_id to offset
2627
std::shared_ptr<NetworkResourceManager> network_resource_manager_;
2728
};
2829
} // namespace node::inspector::protocol

src/inspector/network_agent.cc

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -358,10 +358,9 @@ protocol::DispatchResponse NetworkAgent::loadNetworkResource(
358358
std::string data = network_resource_manager_->Get(in_url);
359359
bool found = !data.empty();
360360
if (found) {
361-
uint64_t stream_id = network_resource_manager_->GetStreamId(in_url);
362361
auto result = protocol::Network::LoadNetworkResourcePageResult::create()
363362
.setSuccess(true)
364-
.setStream(std::to_string(stream_id))
363+
.setStream(in_url)
365364
.build();
366365
*out_resource = std::move(result);
367366
return protocol::DispatchResponse::Success();

src/inspector/network_resource_manager.cc

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ void NetworkResourceManager::Put(const std::string& url,
1111
const std::string& data) {
1212
Mutex::ScopedLock lock(mutex_);
1313
resources_[url] = data;
14-
url_to_stream_id_[url] = ++stream_id_counter_;
1514
}
1615

1716
std::string NetworkResourceManager::Get(const std::string& url) {
@@ -21,37 +20,9 @@ std::string NetworkResourceManager::Get(const std::string& url) {
2120
return {};
2221
}
2322

24-
uint64_t NetworkResourceManager::NextStreamId() {
25-
return ++stream_id_counter_;
26-
}
27-
28-
std::string NetworkResourceManager::GetUrlForStreamId(uint64_t stream_id) {
29-
Mutex::ScopedLock lock(mutex_);
30-
for (const auto& pair : url_to_stream_id_) {
31-
if (pair.second == stream_id) {
32-
return pair.first;
33-
}
34-
}
35-
return std::string();
36-
}
37-
38-
void NetworkResourceManager::EraseByStreamId(uint64_t stream_id) {
39-
Mutex::ScopedLock lock(mutex_);
40-
for (auto it = url_to_stream_id_.begin(); it != url_to_stream_id_.end();
41-
++it) {
42-
if (it->second == stream_id) {
43-
resources_.erase(it->first);
44-
url_to_stream_id_.erase(it);
45-
break;
46-
}
47-
}
48-
}
49-
50-
uint64_t NetworkResourceManager::GetStreamId(const std::string& url) {
23+
void NetworkResourceManager::Erase(const std::string& stream_id) {
5124
Mutex::ScopedLock lock(mutex_);
52-
auto it = url_to_stream_id_.find(url);
53-
if (it != url_to_stream_id_.end()) return it->second;
54-
return 0;
25+
resources_.erase(stream_id);
5526
}
5627

5728
} // namespace inspector

src/inspector/network_resource_manager.h

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,12 @@ class NetworkResourceManager {
1515
void Put(const std::string& url, const std::string& data);
1616
std::string Get(const std::string& url);
1717

18-
// Accessor to get URL for a given stream id
19-
std::string GetUrlForStreamId(uint64_t stream_id);
2018
// Erase resource and mapping by stream id
21-
void EraseByStreamId(uint64_t stream_id);
22-
// Returns the stream id for a given url, or 0 if not found
23-
uint64_t GetStreamId(const std::string& url);
19+
void Erase(const std::string& stream_id);
2420

2521
private:
26-
uint64_t NextStreamId();
2722
std::unordered_map<std::string, std::string> resources_;
28-
std::unordered_map<std::string, uint64_t> url_to_stream_id_;
29-
std::atomic<uint64_t> stream_id_counter_{1};
30-
Mutex mutex_; // Protects access to resources_ and url_to_stream_id_
23+
Mutex mutex_; // Protects access to resources_
3124
};
3225

3326
} // namespace inspector

test/parallel/test-inspector-network-resource.js

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ const fs = require('fs');
1313
const resourceUrl = 'http://localhost:3000/app.js';
1414
const resourcePath = path.join(__dirname, '../fixtures/inspector-network-resource/app.js.map');
1515

16+
const resourceText = fs.readFileSync(resourcePath, 'utf8');
1617
const script = `
1718
const { NetworkResources } = require('node:inspector');
1819
const fs = require('fs');
@@ -55,8 +56,7 @@ test('should load and stream a static network resource using loadNetworkResource
5556
eof = result.eof;
5657
}
5758
content += data;
58-
const expected = fs.readFileSync(resourcePath, 'utf8');
59-
assert.strictEqual(content, expected);
59+
assert.strictEqual(content, resourceText);
6060
await session.send({ method: 'IO.close', params: { handle: resource.stream } });
6161
await session.send({ method: 'Debugger.resume' });
6262
await session.waitForDisconnect();
@@ -98,13 +98,12 @@ test('should support IO.read with size and offset', async () => {
9898
});
9999
assert(resource.success);
100100
assert(resource.stream);
101-
const expected = fs.readFileSync(resourcePath, 'utf8');
102101
let result = await session.send({ method: 'IO.read', params: { handle: resource.stream, size: 5 } });
103-
assert.strictEqual(result.data, expected.slice(0, 5));
102+
assert.strictEqual(result.data, resourceText.slice(0, 5));
104103
result = await session.send({ method: 'IO.read', params: { handle: resource.stream, offset: 5, size: 5 } });
105-
assert.strictEqual(result.data, expected.slice(5, 10));
104+
assert.strictEqual(result.data, resourceText.slice(5, 10));
106105
result = await session.send({ method: 'IO.read', params: { handle: resource.stream, offset: 10 } });
107-
assert.strictEqual(result.data, expected.slice(10));
106+
assert.strictEqual(result.data, resourceText.slice(10));
108107
await session.send({ method: 'IO.close', params: { handle: resource.stream } });
109108
await session.send({ method: 'Debugger.resume' });
110109
await session.waitForDisconnect();
@@ -131,12 +130,16 @@ test('should load resource put from another thread', async () => {
131130
await setupInspector(session);
132131
await session.waitForNotification('Debugger.paused');
133132
await session.send({ method: 'Debugger.resume' });
134-
const sessionId = '1';
135133
await session.waitForNotification('Target.targetCreated');
136134
await session.send({ method: 'Target.setAutoAttach', params: { autoAttach: true, waitForDebuggerOnStart: true } });
135+
let sessionId;
137136
await session.waitForNotification((notification) => {
138-
return notification.method === 'Target.attachedToTarget' &&
139-
notification.params.sessionId === sessionId;
137+
if (notification.method === 'Target.attachedToTarget') {
138+
sessionId = notification.params.sessionId;
139+
return true;
140+
}
141+
return false;
142+
140143
});
141144
await setupInspector(session, sessionId);
142145

@@ -160,8 +163,7 @@ test('should load resource put from another thread', async () => {
160163
eof = result.eof;
161164
}
162165
content += data;
163-
const expected = fs.readFileSync(resourcePath, 'utf8');
164-
assert.strictEqual(content, expected);
166+
assert.strictEqual(content, resourceText);
165167
await session.send({ method: 'IO.close', params: { handle: resource.stream, sessionId } });
166168

167169
await session.send({ method: 'Debugger.resume', sessionId });

0 commit comments

Comments
 (0)