We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Update OTLP HTTP port
As per spec change here:

https://github.com/open-telemetry/opentelemetry-specification/pull/1839

The OTLP HTTP port should be 4318.

--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py`
Content:
```
1 # Copyright The OpenTelemetry Authors
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 #     http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14 
15 import gzip
16 import logging
17 import zlib
18 from io import BytesIO
19 from os import environ
20 from typing import Dict, Optional
21 from time import sleep
22 
23 import requests
24 from backoff import expo
25 
26 from opentelemetry.sdk.environment_variables import (
27     OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
28     OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,
29     OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
30     OTEL_EXPORTER_OTLP_TRACES_HEADERS,
31     OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
32     OTEL_EXPORTER_OTLP_CERTIFICATE,
33     OTEL_EXPORTER_OTLP_COMPRESSION,
34     OTEL_EXPORTER_OTLP_ENDPOINT,
35     OTEL_EXPORTER_OTLP_HEADERS,
36     OTEL_EXPORTER_OTLP_TIMEOUT,
37 )
38 from opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult
39 from opentelemetry.exporter.otlp.proto.http import Compression
40 from opentelemetry.exporter.otlp.proto.http.trace_exporter.encoder import (
41     _ProtobufEncoder,
42 )
43 from opentelemetry.util.re import parse_headers
44 
45 
46 _logger = logging.getLogger(__name__)
47 
48 
49 DEFAULT_COMPRESSION = Compression.NoCompression
50 DEFAULT_ENDPOINT = "http://localhost:55681/v1/traces"
51 DEFAULT_TIMEOUT = 10  # in seconds
52 
53 
54 class OTLPSpanExporter(SpanExporter):
55 
56     _MAX_RETRY_TIMEOUT = 64
57 
58     def __init__(
59         self,
60         endpoint: Optional[str] = None,
61         certificate_file: Optional[str] = None,
62         headers: Optional[Dict[str, str]] = None,
63         timeout: Optional[int] = None,
64         compression: Optional[Compression] = None,
65     ):
66         self._endpoint = endpoint or environ.get(
67             OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,
68             environ.get(OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_ENDPOINT),
69         )
70         self._certificate_file = certificate_file or environ.get(
71             OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,
72             environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),
73         )
74         headers_string = environ.get(
75             OTEL_EXPORTER_OTLP_TRACES_HEADERS,
76             environ.get(OTEL_EXPORTER_OTLP_HEADERS, ""),
77         )
78         self._headers = headers or parse_headers(headers_string)
79         self._timeout = timeout or int(
80             environ.get(
81                 OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
82                 environ.get(OTEL_EXPORTER_OTLP_TIMEOUT, DEFAULT_TIMEOUT),
83             )
84         )
85         self._compression = compression or _compression_from_env()
86         self._session = requests.Session()
87         self._session.headers.update(self._headers)
88         self._session.headers.update(
89             {"Content-Type": _ProtobufEncoder._CONTENT_TYPE}
90         )
91         if self._compression is not Compression.NoCompression:
92             self._session.headers.update(
93                 {"Content-Encoding": self._compression.value}
94             )
95         self._shutdown = False
96 
97     def _export(self, serialized_data: str):
98         data = serialized_data
99         if self._compression == Compression.Gzip:
100             gzip_data = BytesIO()
101             with gzip.GzipFile(fileobj=gzip_data, mode="w") as gzip_stream:
102                 gzip_stream.write(serialized_data)
103             data = gzip_data.getvalue()
104         elif self._compression == Compression.Deflate:
105             data = zlib.compress(bytes(serialized_data))
106 
107         return self._session.post(
108             url=self._endpoint,
109             data=data,
110             verify=self._certificate_file,
111             timeout=self._timeout,
112         )
113 
114     @staticmethod
115     def _retryable(resp: requests.Response) -> bool:
116         if resp.status_code == 408:
117             return True
118         if resp.status_code >= 500 and resp.status_code <= 599:
119             return True
120         return False
121 
122     def export(self, spans) -> SpanExportResult:
123         # After the call to Shutdown subsequent calls to Export are
124         # not allowed and should return a Failure result.
125         if self._shutdown:
126             _logger.warning("Exporter already shutdown, ignoring batch")
127             return SpanExportResult.FAILURE
128 
129         serialized_data = _ProtobufEncoder.serialize(spans)
130 
131         for delay in expo(max_value=self._MAX_RETRY_TIMEOUT):
132 
133             if delay == self._MAX_RETRY_TIMEOUT:
134                 return SpanExportResult.FAILURE
135 
136             resp = self._export(serialized_data)
137             # pylint: disable=no-else-return
138             if resp.status_code in (200, 202):
139                 return SpanExportResult.SUCCESS
140             elif self._retryable(resp):
141                 _logger.debug(
142                     "Waiting %ss before retrying export of span", delay
143                 )
144                 sleep(delay)
145                 continue
146             else:
147                 _logger.warning(
148                     "Failed to export batch code: %s, reason: %s",
149                     resp.status_code,
150                     resp.text,
151                 )
152                 return SpanExportResult.FAILURE
153         return SpanExportResult.FAILURE
154 
155     def shutdown(self):
156         if self._shutdown:
157             _logger.warning("Exporter already shutdown, ignoring call")
158             return
159         self._session.close()
160         self._shutdown = True
161 
162 
163 def _compression_from_env() -> Compression:
164     compression = (
165         environ.get(
166             OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,
167             environ.get(OTEL_EXPORTER_OTLP_COMPRESSION, "none"),
168         )
169         .lower()
170         .strip()
171     )
172     return Compression(compression)
173
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py
--- a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py
+++ b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py
@@ -47,7 +47,7 @@
 
 
 DEFAULT_COMPRESSION = Compression.NoCompression
-DEFAULT_ENDPOINT = "http://localhost:55681/v1/traces"
+DEFAULT_ENDPOINT = "http://localhost:4318/v1/traces"
 DEFAULT_TIMEOUT = 10  # in seconds

{"golden_diff": "diff --git a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py\n--- a/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py\n+++ b/exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py\n@@ -47,7 +47,7 @@\n \n \n DEFAULT_COMPRESSION = Compression.NoCompression\n-DEFAULT_ENDPOINT = \"http://localhost:55681/v1/traces\"\n+DEFAULT_ENDPOINT = \"http://localhost:4318/v1/traces\"\n DEFAULT_TIMEOUT = 10  # in seconds\n", "issue": "Update OTLP HTTP port\nAs per spec change here:\r\n\r\nhttps://github.com/open-telemetry/opentelemetry-specification/pull/1839\r\n\r\nThe OTLP HTTP port should be 4318.\n", "before_files": [{"content": "# Copyright The OpenTelemetry Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport gzip\nimport logging\nimport zlib\nfrom io import BytesIO\nfrom os import environ\nfrom typing import Dict, Optional\nfrom time import sleep\n\nimport requests\nfrom backoff import expo\n\nfrom opentelemetry.sdk.environment_variables import (\n    OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,\n    OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,\n    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,\n    OTEL_EXPORTER_OTLP_TRACES_HEADERS,\n    OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,\n    OTEL_EXPORTER_OTLP_CERTIFICATE,\n    OTEL_EXPORTER_OTLP_COMPRESSION,\n    OTEL_EXPORTER_OTLP_ENDPOINT,\n    OTEL_EXPORTER_OTLP_HEADERS,\n    OTEL_EXPORTER_OTLP_TIMEOUT,\n)\nfrom opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult\nfrom opentelemetry.exporter.otlp.proto.http import Compression\nfrom opentelemetry.exporter.otlp.proto.http.trace_exporter.encoder import (\n    _ProtobufEncoder,\n)\nfrom opentelemetry.util.re import parse_headers\n\n\n_logger = logging.getLogger(__name__)\n\n\nDEFAULT_COMPRESSION = Compression.NoCompression\nDEFAULT_ENDPOINT = \"http://localhost:55681/v1/traces\"\nDEFAULT_TIMEOUT = 10  # in seconds\n\n\nclass OTLPSpanExporter(SpanExporter):\n\n    _MAX_RETRY_TIMEOUT = 64\n\n    def __init__(\n        self,\n        endpoint: Optional[str] = None,\n        certificate_file: Optional[str] = None,\n        headers: Optional[Dict[str, str]] = None,\n        timeout: Optional[int] = None,\n        compression: Optional[Compression] = None,\n    ):\n        self._endpoint = endpoint or environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,\n            environ.get(OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_ENDPOINT),\n        )\n        self._certificate_file = certificate_file or environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,\n            environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),\n        )\n        headers_string = environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_HEADERS,\n            environ.get(OTEL_EXPORTER_OTLP_HEADERS, \"\"),\n        )\n        self._headers = headers or parse_headers(headers_string)\n        self._timeout = timeout or int(\n            environ.get(\n                OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,\n                environ.get(OTEL_EXPORTER_OTLP_TIMEOUT, DEFAULT_TIMEOUT),\n            )\n        )\n        self._compression = compression or _compression_from_env()\n        self._session = requests.Session()\n        self._session.headers.update(self._headers)\n        self._session.headers.update(\n            {\"Content-Type\": _ProtobufEncoder._CONTENT_TYPE}\n        )\n        if self._compression is not Compression.NoCompression:\n            self._session.headers.update(\n                {\"Content-Encoding\": self._compression.value}\n            )\n        self._shutdown = False\n\n    def _export(self, serialized_data: str):\n        data = serialized_data\n        if self._compression == Compression.Gzip:\n            gzip_data = BytesIO()\n            with gzip.GzipFile(fileobj=gzip_data, mode=\"w\") as gzip_stream:\n                gzip_stream.write(serialized_data)\n            data = gzip_data.getvalue()\n        elif self._compression == Compression.Deflate:\n            data = zlib.compress(bytes(serialized_data))\n\n        return self._session.post(\n            url=self._endpoint,\n            data=data,\n            verify=self._certificate_file,\n            timeout=self._timeout,\n        )\n\n    @staticmethod\n    def _retryable(resp: requests.Response) -> bool:\n        if resp.status_code == 408:\n            return True\n        if resp.status_code >= 500 and resp.status_code <= 599:\n            return True\n        return False\n\n    def export(self, spans) -> SpanExportResult:\n        # After the call to Shutdown subsequent calls to Export are\n        # not allowed and should return a Failure result.\n        if self._shutdown:\n            _logger.warning(\"Exporter already shutdown, ignoring batch\")\n            return SpanExportResult.FAILURE\n\n        serialized_data = _ProtobufEncoder.serialize(spans)\n\n        for delay in expo(max_value=self._MAX_RETRY_TIMEOUT):\n\n            if delay == self._MAX_RETRY_TIMEOUT:\n                return SpanExportResult.FAILURE\n\n            resp = self._export(serialized_data)\n            # pylint: disable=no-else-return\n            if resp.status_code in (200, 202):\n                return SpanExportResult.SUCCESS\n            elif self._retryable(resp):\n                _logger.debug(\n                    \"Waiting %ss before retrying export of span\", delay\n                )\n                sleep(delay)\n                continue\n            else:\n                _logger.warning(\n                    \"Failed to export batch code: %s, reason: %s\",\n                    resp.status_code,\n                    resp.text,\n                )\n                return SpanExportResult.FAILURE\n        return SpanExportResult.FAILURE\n\n    def shutdown(self):\n        if self._shutdown:\n            _logger.warning(\"Exporter already shutdown, ignoring call\")\n            return\n        self._session.close()\n        self._shutdown = True\n\n\ndef _compression_from_env() -> Compression:\n    compression = (\n        environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,\n            environ.get(OTEL_EXPORTER_OTLP_COMPRESSION, \"none\"),\n        )\n        .lower()\n        .strip()\n    )\n    return Compression(compression)\n", "path": "exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py"}], "after_files": [{"content": "# Copyright The OpenTelemetry Authors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this file except in compliance with the License.\n# You may obtain a copy of the License at\n#\n#     http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n\nimport gzip\nimport logging\nimport zlib\nfrom io import BytesIO\nfrom os import environ\nfrom typing import Dict, Optional\nfrom time import sleep\n\nimport requests\nfrom backoff import expo\n\nfrom opentelemetry.sdk.environment_variables import (\n    OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,\n    OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,\n    OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,\n    OTEL_EXPORTER_OTLP_TRACES_HEADERS,\n    OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,\n    OTEL_EXPORTER_OTLP_CERTIFICATE,\n    OTEL_EXPORTER_OTLP_COMPRESSION,\n    OTEL_EXPORTER_OTLP_ENDPOINT,\n    OTEL_EXPORTER_OTLP_HEADERS,\n    OTEL_EXPORTER_OTLP_TIMEOUT,\n)\nfrom opentelemetry.sdk.trace.export import SpanExporter, SpanExportResult\nfrom opentelemetry.exporter.otlp.proto.http import Compression\nfrom opentelemetry.exporter.otlp.proto.http.trace_exporter.encoder import (\n    _ProtobufEncoder,\n)\nfrom opentelemetry.util.re import parse_headers\n\n\n_logger = logging.getLogger(__name__)\n\n\nDEFAULT_COMPRESSION = Compression.NoCompression\nDEFAULT_ENDPOINT = \"http://localhost:4318/v1/traces\"\nDEFAULT_TIMEOUT = 10  # in seconds\n\n\nclass OTLPSpanExporter(SpanExporter):\n\n    _MAX_RETRY_TIMEOUT = 64\n\n    def __init__(\n        self,\n        endpoint: Optional[str] = None,\n        certificate_file: Optional[str] = None,\n        headers: Optional[Dict[str, str]] = None,\n        timeout: Optional[int] = None,\n        compression: Optional[Compression] = None,\n    ):\n        self._endpoint = endpoint or environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_ENDPOINT,\n            environ.get(OTEL_EXPORTER_OTLP_ENDPOINT, DEFAULT_ENDPOINT),\n        )\n        self._certificate_file = certificate_file or environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_CERTIFICATE,\n            environ.get(OTEL_EXPORTER_OTLP_CERTIFICATE, True),\n        )\n        headers_string = environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_HEADERS,\n            environ.get(OTEL_EXPORTER_OTLP_HEADERS, \"\"),\n        )\n        self._headers = headers or parse_headers(headers_string)\n        self._timeout = timeout or int(\n            environ.get(\n                OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,\n                environ.get(OTEL_EXPORTER_OTLP_TIMEOUT, DEFAULT_TIMEOUT),\n            )\n        )\n        self._compression = compression or _compression_from_env()\n        self._session = requests.Session()\n        self._session.headers.update(self._headers)\n        self._session.headers.update(\n            {\"Content-Type\": _ProtobufEncoder._CONTENT_TYPE}\n        )\n        if self._compression is not Compression.NoCompression:\n            self._session.headers.update(\n                {\"Content-Encoding\": self._compression.value}\n            )\n        self._shutdown = False\n\n    def _export(self, serialized_data: str):\n        data = serialized_data\n        if self._compression == Compression.Gzip:\n            gzip_data = BytesIO()\n            with gzip.GzipFile(fileobj=gzip_data, mode=\"w\") as gzip_stream:\n                gzip_stream.write(serialized_data)\n            data = gzip_data.getvalue()\n        elif self._compression == Compression.Deflate:\n            data = zlib.compress(bytes(serialized_data))\n\n        return self._session.post(\n            url=self._endpoint,\n            data=data,\n            verify=self._certificate_file,\n            timeout=self._timeout,\n        )\n\n    @staticmethod\n    def _retryable(resp: requests.Response) -> bool:\n        if resp.status_code == 408:\n            return True\n        if resp.status_code >= 500 and resp.status_code <= 599:\n            return True\n        return False\n\n    def export(self, spans) -> SpanExportResult:\n        # After the call to Shutdown subsequent calls to Export are\n        # not allowed and should return a Failure result.\n        if self._shutdown:\n            _logger.warning(\"Exporter already shutdown, ignoring batch\")\n            return SpanExportResult.FAILURE\n\n        serialized_data = _ProtobufEncoder.serialize(spans)\n\n        for delay in expo(max_value=self._MAX_RETRY_TIMEOUT):\n\n            if delay == self._MAX_RETRY_TIMEOUT:\n                return SpanExportResult.FAILURE\n\n            resp = self._export(serialized_data)\n            # pylint: disable=no-else-return\n            if resp.status_code in (200, 202):\n                return SpanExportResult.SUCCESS\n            elif self._retryable(resp):\n                _logger.debug(\n                    \"Waiting %ss before retrying export of span\", delay\n                )\n                sleep(delay)\n                continue\n            else:\n                _logger.warning(\n                    \"Failed to export batch code: %s, reason: %s\",\n                    resp.status_code,\n                    resp.text,\n                )\n                return SpanExportResult.FAILURE\n        return SpanExportResult.FAILURE\n\n    def shutdown(self):\n        if self._shutdown:\n            _logger.warning(\"Exporter already shutdown, ignoring call\")\n            return\n        self._session.close()\n        self._shutdown = True\n\n\ndef _compression_from_env() -> Compression:\n    compression = (\n        environ.get(\n            OTEL_EXPORTER_OTLP_TRACES_COMPRESSION,\n            environ.get(OTEL_EXPORTER_OTLP_COMPRESSION, \"none\"),\n        )\n        .lower()\n        .strip()\n    )\n    return Compression(compression)\n", "path": "exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py"}]}