[gold] Enable diff server

Changes configs so that all diffing is handled
by the diff server and images are served directly
from the diff server.

Increases the grpc message size of the GRPC service
between Gold and the diffserver which was found o the be 
an issue during testing.

Bug: skia:
Change-Id: Ib6a40a5cd657751ead09182bb2f0efb51cc624ad
Reviewed-on: https://skia-review.googlesource.com/19980
Commit-Queue: Stephan Altmueller <stephana@google.com>
Reviewed-by: Ravi Mistry <rmistry@google.com>
diff --git a/golden/go/diffstore/diffservice_impl.go b/golden/go/diffstore/diffservice_impl.go
index 0027e74..8cd3d71 100644
--- a/golden/go/diffstore/diffservice_impl.go
+++ b/golden/go/diffstore/diffservice_impl.go
@@ -9,6 +9,8 @@
 // Generate the go code from the protocol buffer definitions.
 //go:generate protoc --go_out=plugins=grpc:. diffservice.proto
 
+const MAX_MESSAGE_SIZE = 100 * 1024 * 1024
+
 // DiffServiceImpl implements DiffServiceServer.
 type DiffServiceImpl struct {
 	diffStore diff.DiffStore
diff --git a/golden/go/skia_diff_server/main.go b/golden/go/skia_diff_server/main.go
index 086d8b5..3253603 100644
--- a/golden/go/skia_diff_server/main.go
+++ b/golden/go/skia_diff_server/main.go
@@ -76,7 +76,9 @@
 
 	// Create the server side instance of the DiffService.
 	serverImpl := diffstore.NewDiffServiceServer(memDiffStore)
-	grpcServer := grpc.NewServer()
+	grpcServer := grpc.NewServer(
+		grpc.MaxRecvMsgSize(diffstore.MAX_MESSAGE_SIZE),
+		grpc.MaxSendMsgSize(diffstore.MAX_MESSAGE_SIZE))
 	diffstore.RegisterDiffServiceServer(grpcServer, serverImpl)
 
 	// Set up the resource to serve the image files.
diff --git a/golden/go/skiacorrectness/main.go b/golden/go/skiacorrectness/main.go
index 3fd9650..e9014cd 100644
--- a/golden/go/skiacorrectness/main.go
+++ b/golden/go/skiacorrectness/main.go
@@ -183,7 +183,11 @@
 	var diffStore diff.DiffStore = nil
 	if (*diffServerGRPCAddr != "") || (*diffServerImageAddr != "") {
 		// Create the client connection and connect to the server.
-		conn, err := grpc.Dial(*diffServerGRPCAddr, grpc.WithInsecure())
+		conn, err := grpc.Dial(*diffServerGRPCAddr,
+			grpc.WithInsecure(),
+			grpc.WithDefaultCallOptions(
+				grpc.MaxCallSendMsgSize(diffstore.MAX_MESSAGE_SIZE),
+				grpc.MaxCallRecvMsgSize(diffstore.MAX_MESSAGE_SIZE)))
 		if err != nil {
 			sklog.Fatalf("Unable to connect to grpc service: %s", err)
 		}
@@ -192,11 +196,13 @@
 		if err != nil {
 			sklog.Fatalf("Unable to initialize NetDiffStore: %s", err)
 		}
+		sklog.Infof("DiffStore: NetDiffStore initiated.")
 	} else {
 		diffStore, err = diffstore.NewMemDiffStore(client, *imageDir, strings.Split(*gsBucketNames, ","), diffstore.DEFAULT_GCS_IMG_DIR_NAME, *cacheSize)
 		if err != nil {
 			sklog.Fatalf("Allocating local DiffStore failed: %s", err)
 		}
+		sklog.Infof("DiffStore: MemDiffStore initiated.")
 	}
 
 	// Set up databases and tile builders.
diff --git a/golden/sys/diffserver-prod.service b/golden/sys/diffserver-prod.service
index 55dea21..2d6810d 100644
--- a/golden/sys/diffserver-prod.service
+++ b/golden/sys/diffserver-prod.service
@@ -6,12 +6,12 @@
 [Service]
 Environment=DATA_DIR=/mnt/pd0/data
 
-ExecStart=/usr/local/bin/skia-diff-server \
+ExecStart=/usr/local/bin/diffserver-prod \
     --grpc_port=:8000 \
     --image_dir=${DATA_DIR}/imageStore \
     --image_port=:8001 \
     --logtostderr \
-    --prom_port=":23000" \
+    --prom_port=":20000" \
     --gs_buckets=skia-infra-gm,chromium-skia-gm   \
     --cache_size=20
 
diff --git a/golden/sys/skiacorrectness-prod.service b/golden/sys/skiacorrectness-prod.service
index 5fa1c55..38b35c2 100644
--- a/golden/sys/skiacorrectness-prod.service
+++ b/golden/sys/skiacorrectness-prod.service
@@ -24,7 +24,9 @@
     --resources_dir=/usr/local/share/skiacorrectness/frontend \
     --prom_port=:20001 \
     --hash_file_bucket=skia-infra-gm \
-    --hash_file_path=hash_files/gold-prod-hashes.txt
+    --hash_file_path=hash_files/gold-prod-hashes.txt \
+    --diff_server_grpc=skia-diffserver-prod:8000 \
+    --diff_server_http=skia-diffserver-prod:8001
 
 Restart=always
 User=default
diff --git a/prometheus/sys/prometheus.yml b/prometheus/sys/prometheus.yml
index 0ee2749..3ce3700 100644
--- a/prometheus/sys/prometheus.yml
+++ b/prometheus/sys/prometheus.yml
@@ -56,6 +56,10 @@
     static_configs:
       - targets: ['skia-internal:20000']
 
+  - job_name: 'diffserver'
+    static_configs:
+      - targets: ['skia-diffserver-prod:20000']
+
   - job_name: 'docserver'
     static_configs:
       - targets: ['skia-docs:20000']
@@ -155,6 +159,7 @@
       - targets: ['skia-cq-watcher:11000']
       - targets: ['skia-datahopper2:11000']
       - targets: ['skia-debugger:11000']
+      - targets: ['skia-diffserver-prod	:11000']
       - targets: ['skia-docs:11000']
       - targets: ['skia-fiddle:11000']
       - targets: ['skia-fuzzer-be-1:11000']
diff --git a/skfe/sys/skia_org_nginx b/skfe/sys/skia_org_nginx
index e4bb95e..562fc06 100644
--- a/skfe/sys/skia_org_nginx
+++ b/skfe/sys/skia_org_nginx
@@ -223,6 +223,12 @@
       proxy_pass https://storage.googleapis.com/skia-infra-gm/hash_files/gold-prod-hashes.txt;
     }
 
+    # Serve images directly from the diff server.
+    location /img/ {
+      proxy_pass http://skia-diffserver-prod:8001;
+      proxy_set_header Host $host;
+    }
+
     location / {
         proxy_pass http://skia-gold-prod:8001;
         proxy_set_header Host $host;